|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
理论答案应该有92种!我的只有2种,不懂哪里错了!
- #include<iostream>
- using namespace std;
- int sum, a[8][8];
- int pd(int x,int y ) // 判断x行y列是否可以放皇后
- {
- int i,j;
- for(i=0;i<x;i++) // 判断头上是否有皇后
- {
- if(a[i][y])
- return 0;
- }
- for(i=x-1,j=y-1;i>=0,j>=0;i--,j--) //判断左上方
- {
- if(a[i][j])
- return 0;
- }
- for(i=x-1,j=y+1;i>=0,j<8;i--,j++) //判断右上方
- {
- if(a[i][j]) //因为是从上到下的放法 ,所以不需要判断左下方和右下方
- return 0;
- }
- return 1; //可以放的话返回1
- }
- int search(int k)
- {
- int i;
- for(i=0;i<8;i++)
- {
-
- if(pd(k,i)) //符合条件
- {
-
- a[k][i]=1; //放入皇后
- if(7==k)
- {
- cout<<sum++<<endl; //如果放满8个就打印
- for(int m=0;m<8;++m)
- {
- for(int n =0;n<8;++n)
- {
- cout<<a[m][n]<<" ";
- }
- cout<<endl;
- }
- }
- else
- search(k+1); //搜索下一个位置
- a[k][i]=0; //回溯
- }
- }
- }
- int main()
- {
-
- int i,j;
- for(i=0;i<8;++i)
- for(j=0;j<8;++j)
- a[i][j]=0; //初始化
- search(0);
- return 0;
- }
复制代码 |
|