Guest User

BattleGirlBingoMaximizerAlpha.cpp

a guest
Aug 25th, 2016
407
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4.  
  5. #define Du 16
  6. #define Dd 10
  7.  
  8. /*
  9. 0-Sadone    1-Hinata    2-Sakura
  10. 3-Kaede     4-Michael
  11. 5-Urara     6-Kokomi
  12. 7-Miki      8-Haruka    9-Subaru
  13. A-Kurumi    B-Nozomi    C-Yuri
  14. D-Anko      E-Asuha     F-Renge
  15. */
  16.  
  17. string name[]={ "莎朵霓","日  向","  櫻  ","  楓  ",
  18.                 "姆  咪","烏拉拉","心  美","美  紀",
  19.                 "遙  香","  昴  ","胡  桃","  望  ",
  20.                 "百  合","杏  子","明日葉","蓮  華"};
  21.  
  22. class Pool{
  23.     public:
  24.         int va,vb,a[10],i;
  25.         Pool(){
  26.             for(i=0;i<10;i++){
  27.                 a[i]=0;
  28.             }
  29.             va=0;vb=0;
  30.         }
  31.         void copy(Pool *p){
  32.             for(i=0;i<10;i++){
  33.                 this->a[i]=p->a[i];
  34.             }
  35.             this->va=p->va;
  36.             this->vb=p->vb;
  37.         }
  38.         void set(int t[]){
  39.             for(i=0;i<10;i++){
  40.                 a[i]=t[i];
  41.             }
  42.         }
  43.         bool q(int x){
  44.             if(x<0) return false;
  45.             for(i=0;i<10;i++){
  46.                 if(x==a[i]) return true;
  47.             }
  48.             return false;
  49.         }
  50.         void setValue(int x,int y){
  51.             va=x;
  52.             vb=y;
  53.         }
  54. };
  55.  
  56. class CEnum{
  57.     public:
  58.         int a[Dd],i;
  59.         bool k;
  60.         CEnum(){
  61.             for(i=0;i<Dd;i++){
  62.                 a[i]=i;
  63.             }
  64.             k=true;
  65.         }
  66.         void n(int x){
  67.             //cout<<"Stage "<<x<<" starts : "<< a[x]<<endl;
  68.             a[x]++;
  69.             if(a[0]==Du-Dd+1){
  70.                 k=false;
  71.                 return;
  72.             }
  73.             if(a[x]==x+Du-Dd+1){
  74.                 n(x-1);
  75.                 a[x]=a[x-1]+1;
  76.             }
  77.             //cout<<"Stage "<<x<<" finish : "<< a[x]<<endl;
  78.         }
  79.         void next(){
  80.             n(Dd-1);
  81.         }
  82. };
  83.  
  84. class Board{
  85.     public:
  86.         int a[5][5],i,j;
  87.         bool b[5][5];
  88.         Board(){
  89.             for(i=0;i<5;i++)
  90.                 for(j=0;j<5;j++){
  91.                     a[i][j]=-1;
  92.             }
  93.             init();
  94.         }
  95.         void init(){
  96.             for(i=0;i<5;i++)
  97.                 for(j=0;j<5;j++){
  98.                     b[i][j]=false;
  99.             }
  100.             a[2][2]=-1;
  101.             b[2][2]=true;
  102.         }
  103.         void calc(Pool *p){
  104.             init();
  105.             int x,y,tmp;
  106.             x=0;y=0;
  107.             for(i=0;i<5;i++)
  108.                 for(j=0;j<5;j++){
  109.                     if(p->q(a[i][j]))
  110.                         b[i][j]=true;
  111.             }
  112.             for(i=0;i<5;i++){
  113.                 tmp=0;
  114.                 for(j=0;j<5;j++){
  115.                     if(b[i][j])
  116.                         tmp++;
  117.                 }
  118.                 if(tmp==5) x++;
  119.                 if(tmp==4) y++;
  120.                 tmp=0;
  121.                 for(j=0;j<5;j++){
  122.                     if(b[j][i])
  123.                         tmp++;
  124.                 }
  125.                 if(tmp==5) x++;
  126.                 if(tmp==4) y++;
  127.             }
  128.                 tmp=0;
  129.                 j=0;
  130.                 for(i=0;i<5;i++){
  131.                     if(b[i][i])
  132.                         tmp++;
  133.                     if(b[i][4-i])
  134.                         j++;
  135.                 }
  136.                 if(tmp==5) x++;
  137.                 if(tmp==4) y++;
  138.                 tmp=j;
  139.                 if(tmp==5) x++;
  140.                 if(tmp==4) y++;
  141.            
  142.             p->setValue(x,y);
  143.         }
  144.        
  145. };
  146.  
  147. void paint(Board *b,int x,int y){
  148.     int i,j;
  149.     system("cls");
  150.     for(i=0;i<16;i++){
  151.         if(i%4==0)cout<<endl;
  152.         cout<<name[i]<<" - ";
  153.         printf("%2d\t",i);
  154.         if(i%4==3)cout<<endl;
  155.     }
  156.     cout<<endl;
  157.     cout<<"  12345\n\n";
  158.     for(i=0;i<5;i++){
  159.         cout<<(i+1)<<" ";
  160.         for(j=0;j<5;j++){
  161.             if(i==x&&j==y){
  162.                 cout<<"*";
  163.             }
  164.             else if(b->a[i][j]>=10){
  165.                 cout<<(char)(b->a[i][j]+55);
  166.             }else if(b->a[i][j]>=0){
  167.                 cout<<b->a[i][j];
  168.             }else if(b->a[i][j]==-1){
  169.                 cout<<"_";
  170.             }else cout<<" ";
  171.         }
  172.         cout<<endl;
  173.     }
  174.     cout<<endl;
  175.     if(x!=6)cout<<"請輸入上方代號 : ";
  176. }
  177.  
  178. int main(){
  179.     int a,i,j;
  180.     CEnum *c;
  181.     Pool *p,*max;
  182.     Board *b;
  183.     b=new Board();
  184.     p=new Pool();
  185.     max=new Pool();
  186.     c=new CEnum();
  187.    
  188.     for(i=0;i<5;i++)
  189.         for(j=0;j<5;j++){
  190.             if(i==2&&j==2)continue;
  191.             paint(b,i,j);
  192.             cin>>b->a[i][j];
  193.         }  
  194.     paint(b,6,6);
  195.     while(c->k){
  196.         p->set(c->a);
  197.         b->calc(p);
  198.         if(p->va > max->va || (p->va == max->va && p->vb > max->vb)){
  199.             max->copy(p);
  200.             /*for(i=0;i<10;i++){
  201.                 cout << max->a[i]<<" ";
  202.             }
  203.             cout<<"Max: "<<max->va<<","<<max->vb<<endl;*/
  204.         }
  205.         c->next();
  206.     }
  207.    
  208.     for(i=0;i<10;i++){
  209.         cout << name[max->a[i]]<<"\t";
  210.         if(i%5==4)cout<<endl;
  211.     }
  212.     cout<<"\nMax: "<<max->va<<","<<max->vb<<endl;
  213.     return 0;
  214. }
Advertisement
Add Comment
Please, Sign In to add comment