穷举(枚举)法

it2022-05-09  37

 

穷举法:在某个范围内将所有情况进行验证,若某个情况符合条件则为一个解。

 

int Queen()//八皇后问题{ int count = 0; for(int k1=0;k1<8;k1++) {  for(int k2=0;k2<8;k2++)  {   if(abs(k2-k1) == 1 || k2 == k1 )   {    continue;   }   for(int k3=0;k3<8;k3++)   {    if( abs(k3-k1) == 2 ||      abs(k3-k2) == 1 ||      k3 == k1 || k3 == k2)//abs对某个数取绝对值    {     continue;    }    for(int k4=0;k4<8;k4++)    {     if( abs(k4-k1) == 3||      abs(k4-k2) == 2||      abs(k4-k3) == 1||       k4 == k1 || k4 == k2 || k4 == k3 )     {      continue;     }     for(int k5=0;k5<8;k5++)     {      if( abs(k5-k1) == 4||       abs(k5-k2) == 3||       abs(k5-k3) == 2||       abs(k5-k4) == 1||       k5 == k1 || k5 == k2 ||       k5 == k3 || k5 == k4  )      {       continue;      }      for(int k6=0;k6<8;k6++)      {       if( abs(k6-k1) == 5 ||        abs(k6-k2) == 4 ||           abs(k6-k3) == 3 ||           abs(k6-k4) == 2 ||        abs(k6-k5) == 1 ||           k6 == k1 || k6 == k2||        k6 == k3 || k6 == k4||        k6 == k5 )       {        continue;       }       for(int k7=0;k7<8;k7++)       {        if( abs(k7-k1) == 6||               abs(k7-k2) == 5||               abs(k7-k3) == 4||               abs(k7-k4) == 3||               abs(k7-k5) == 2||               abs(k7-k6) == 1||               k7 == k1 || k7 == k2||         k7 == k3 || k7 == k4||         k7 == k5 || k7 == k6)        {         continue;        }        for(int k8=0;k8<8;k8++)        {         if( abs(k8-k1) == 7||                   abs(k8-k2) == 6||                   abs(k8-k3) == 5||                   abs(k8-k4) == 4||                   abs(k8-k5) == 3||                   abs(k8-k6) == 2||          abs(k8-k7) == 1||          k8 == k1 || k8 == k2||          k8 == k3 || k8 == k4||          k8 == k5 || k8 == k6||          k8 == k7          )         {          continue;         }         count++;            printf("k1=%d,k2=%d,k3=%d,k4=%d,k5=%d,k6=%d,k7=%d,k8=%d\n",          k1,k2,k3,k4,k5,k6,k7,k8);        }

       }      }     }    }   }  } } return count; }   

 int  main() {  printf("%d\n",Queen()); }

 

 

/*int Money()//15分,23分,29分,41分,67分的硬币都有足够多,则凑成1808分有多少种情况。{ int count = 0; for(int m1 = 0;m1<1808/15;m1++) {  for(int m2=0;m2<1808/23;m2++)  {   if(m1*15+m2*23>1808)//将已经不符合情况的筛选出去。   {    continue;//结束本趟循环直接进入下一趟。    break:跳出一层循环。   }   for(int m3=0;m3<1808/29;m3++)   {    if(m1*15+m2*23 + m3*29>1808)    {     continue;    }    for(int m4=0;m4<1808/41;m4++)    {     if(m1*15+m2*23 + m3*29 + m4*41>1808)     {      continue;     }     for(int m5=0;m5<1808/67;m5++)     {      if(m1*15+m2*23 + m3*29 + m4*41 + m5*67 == 1808)      {       count++;       printf("15:%d,23:%d,29:%d,41:%d,67:%d\n",m1,m2,m3,m4,m5);      }     }    }   }  } } return count;}

 

int main(){ printf("%d\n",Money());}*/

/*void Competition()//乒乓球比赛问题。a不和x打,c不和x,z打,找出三对赛手名单。 {  char i ,j ,k;  for(i = 'Y';i<='Z';i++)  {   for(j = 'X';j<='Z';j++)   {    if(i == j )    {     continue;    }    for(k = 'X';k<='Z';k++)    {     if(k == 'X' || k == 'Z' || k == j || k == i)     {      continue;     }     printf("A-%c,B-%c,C-%c\n",i,j,k);    }   }  } }

 int main() {  Competition(); }*/

  

转载于:https://www.cnblogs.com/97-5-1/p/7372261.html

相关资源:数据结构—成绩单生成器

最新回复(0)