免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1790 | 回复: 2
打印 上一主题 下一主题

[算法] 谁能介绍一下关于 “八皇后”的算法及实现呀? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-01-25 11:22 |只看该作者 |倒序浏览
谁能介绍一下关于 “八皇后”的算法及实现呀?

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-01-25 13:12 |只看该作者

谁能介绍一下关于 “八皇后”的算法及实现呀?

最简单的就是试探,然后回溯。

论坛徽章:
0
3 [报告]
发表于 2005-01-25 13:26 |只看该作者

谁能介绍一下关于 “八皇后”的算法及实现呀?

  1. #include<vector>;
  2. #include<iostream>;
  3. using std::vector;
  4. using std::cout;
  5. using std::cin;
  6. using std::endl;

  7. void print(vector<int>; a,int n)
  8. {
  9.         for(int i=0;i<n;i++)
  10.         {
  11.                 for(int j=0;j<n;j++)
  12.                 {
  13.                         if(a[i]==j)
  14.                                 cout<<"1 ";
  15.                         else
  16.                                 cout<<"0 ";
  17.                 }
  18.                 cout<<endl;
  19.         }
  20.         cout<<endl;       
  21. }


  22. int queen(int n)
  23. {
  24.         vector<int>; ivec(n);
  25.         int i=0,j=0,k=0,num=0;
  26.         ivec[0]=0;
  27.         while(i>;=0)
  28.         {
  29.                 if(i==0)
  30.                 {
  31.                         i++;
  32.                         ivec[i]=0;
  33.                         k=0;
  34.                 }
  35.                 else if((ivec[i]==ivec[k])||(i-k==ivec[i]-ivec[k])||(k-i==ivec[i]-ivec[k]))
  36.                 {
  37.                         ivec[i]++;
  38.                         k=0;
  39.                         if(ivec[i]==n)
  40.                         {
  41.                                 i--;
  42.                                 ivec[i]++;
  43.                                 if(ivec[i]==n)
  44.                                 {
  45.                                         i--;
  46.                                         if(i>;=0)
  47.                                         {
  48.                                                 ivec[i]++;
  49.                                         }
  50.                                 }
  51.                         }
  52.                 }
  53.                 else
  54.                 {
  55.                         k++;
  56.                         if((i==k)&&(i==n-1))
  57.                         {
  58.                                 num++;
  59.                                 print(ivec,n);
  60.                                 i--;
  61.                                 ivec[i]++;
  62.                                 if(ivec[i]==n)
  63.                                 {
  64.                                         i--;
  65.                                         if(i>;=0)
  66.                                         {
  67.                                                 ivec[i]++;
  68.                                         }
  69.                                 }
  70.                                 k=0;
  71.                         }
  72.                         else if(i==k)
  73.                         {
  74.                                 i++;
  75.                                 ivec[i]=0;
  76.                                 k=0;
  77.                         }
  78.                 }
  79.         }       
  80.         return num;
  81. }

  82. int main()
  83. {
  84.         int n,num;
  85.         cin>;>;n;
  86.         while(n>;0)
  87.         {
  88.                 num=queen(n);
  89.                 cout<<endl<<"There is "<<num<<" answers."<<endl;
  90.                 cin>;>;n;
  91.         }
  92.         return 0;
  93. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP