Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstring>
- using namespace std;
- #define Du 16
- #define Dd 10
- /*
- Developer:Adam36
- Authorized by CC BY-SA 3.0
- */
- /*
- 0-Sadone 1-Hinata 2-Sakura
- 3-Kaede 4-Michael
- 5-Urara 6-Kokomi
- 7-Miki 8-Haruka 9-Subaru
- A-Kurumi B-Nozomi C-Yuri
- D-Anko E-Asuha F-Renge
- */
- string name[]={ "莎朵霓","日 向"," 櫻 "," 楓 ",
- "姆 咪","烏拉拉","心 美","美 紀",
- "遙 香"," 昴 ","胡 桃"," 望 ",
- "百 合","杏 子","明日葉","蓮 華"};
- class Pool{
- public:
- int va,vb,a[10],i;
- Pool(){
- for(i=0;i<10;i++){
- a[i]=0;
- }
- va=0;vb=0;
- }
- void copy(Pool *p){
- for(i=0;i<10;i++){
- this->a[i]=p->a[i];
- }
- this->va=p->va;
- this->vb=p->vb;
- }
- void set(int t[]){
- for(i=0;i<10;i++){
- a[i]=t[i];
- }
- }
- bool q(int x){
- if(x<0) return false;
- for(i=0;i<10;i++){
- if(x==a[i]) return true;
- }
- return false;
- }
- void setValue(int x,int y){
- va=x;
- vb=y;
- }
- };
- class CRing{
- public:
- int a[Dd],hid[Dd/2],i,o[16];
- bool k;
- CRing(){
- for(i=0;i<Dd/2;i++){
- hid[i]=i*2;
- }
- genA();
- k=true;
- }
- void n(int x){
- //cout<<"Stage "<<x<<" starts : "<< a[x]<<endl;
- hid[x]++;
- if(hid[0]==Du-Dd+1){
- k=false;
- return;
- }
- if(hid[x]==x*2+Du-Dd+1){
- n(x-1);
- hid[x]=hid[x-1]+2;
- }
- genA();
- //cout<<"Stage "<<x<<" finish : "<< a[x]<<endl;
- }
- void next(){
- n(Dd/2-1);
- }
- void genA(){
- for(i=0;i<Dd;i++){
- if(i%2==0){
- a[i]=o[hid[i/2]];
- }else{
- a[i]=o[hid[i/2]+1];
- }
- }
- }
- };
- class Board{
- public:
- int a[5][5],i,j;
- bool b[5][5];
- Board(){
- for(i=0;i<5;i++)
- for(j=0;j<5;j++){
- a[i][j]=-1;
- }
- init();
- }
- void init(){
- for(i=0;i<5;i++)
- for(j=0;j<5;j++){
- b[i][j]=false;
- }
- a[2][2]=-1;
- b[2][2]=true;
- }
- void calc(Pool *p){
- init();
- int x,y,tmp;
- x=0;y=0;
- for(i=0;i<5;i++)
- for(j=0;j<5;j++){
- if(p->q(a[i][j]))
- b[i][j]=true;
- }
- for(i=0;i<5;i++){
- tmp=0;
- for(j=0;j<5;j++){
- if(b[i][j])
- tmp++;
- }
- if(tmp==5) x++;
- if(tmp==4) y++;
- tmp=0;
- for(j=0;j<5;j++){
- if(b[j][i])
- tmp++;
- }
- if(tmp==5) x++;
- if(tmp==4) y++;
- }
- tmp=0;
- j=0;
- for(i=0;i<5;i++){
- if(b[i][i])
- tmp++;
- if(b[i][4-i])
- j++;
- }
- if(tmp==5) x++;
- if(tmp==4) y++;
- tmp=j;
- if(tmp==5) x++;
- if(tmp==4) y++;
- p->setValue(x,y);
- }
- };
- void paint(Board *b,int x,int y){
- int i,j;
- system("cls");
- for(i=0;i<16;i++){
- if(i%4==0)cout<<endl;
- cout<<name[i]<<" - ";
- printf("%2d\t",i);
- if(i%4==3)cout<<endl;
- }
- cout<<endl;
- cout<<" 12345\n\n";
- for(i=0;i<5;i++){
- cout<<(i+1)<<" ";
- for(j=0;j<5;j++){
- if(i==x&&j==y){
- cout<<"*";
- }
- else if(b->a[i][j]>=10){
- cout<<(char)(b->a[i][j]+55);
- }else if(b->a[i][j]>=0){
- cout<<b->a[i][j];
- }else if(b->a[i][j]==-1){
- cout<<"_";
- }else cout<<" ";
- }
- cout<<endl;
- }
- cout<<endl;
- if(x!=6)cout<<"請輸入上方代號 : ";
- else cout<<"請輸入跑步順序 以空格相鄰 : ";
- }
- int main(){
- int a,i,j;
- CRing *c;
- Pool *p,*max;
- Board *b;
- b=new Board();
- p=new Pool();
- max=new Pool();
- c=new CRing();
- for(i=0;i<5;i++)
- for(j=0;j<5;j++){
- if(i==2&&j==2)continue;
- paint(b,i,j);
- cin>>b->a[i][j];
- }
- paint(b,6,6);
- for(i=0;i<Du;i++)
- cin>>c->o[i];
- while(c->k){
- p->set(c->a);
- b->calc(p);
- if(p->va > max->va || (p->va == max->va && p->vb > max->vb)){
- max->copy(p);
- /*for(i=0;i<10;i++){
- cout << max->a[i]<<" ";
- }
- cout<<"Max: "<<max->va<<","<<max->vb<<endl;*/
- }
- c->next();
- }
- for(i=0;i<10;i++){
- cout << name[max->a[i]]<<"\t";
- if(i%5==4)cout<<endl;
- }
- cout<<"\nMax: "<<max->va<<","<<max->vb<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment