- 论坛徽章:
- 0
|
谁能介绍一下关于 “八皇后”的算法及实现呀?
- #include<vector>;
- #include<iostream>;
- using std::vector;
- using std::cout;
- using std::cin;
- using std::endl;
- void print(vector<int>; a,int n)
- {
- for(int i=0;i<n;i++)
- {
- for(int j=0;j<n;j++)
- {
- if(a[i]==j)
- cout<<"1 ";
- else
- cout<<"0 ";
- }
- cout<<endl;
- }
- cout<<endl;
- }
- int queen(int n)
- {
- vector<int>; ivec(n);
- int i=0,j=0,k=0,num=0;
- ivec[0]=0;
- while(i>;=0)
- {
- if(i==0)
- {
- i++;
- ivec[i]=0;
- k=0;
- }
- else if((ivec[i]==ivec[k])||(i-k==ivec[i]-ivec[k])||(k-i==ivec[i]-ivec[k]))
- {
- ivec[i]++;
- k=0;
- if(ivec[i]==n)
- {
- i--;
- ivec[i]++;
- if(ivec[i]==n)
- {
- i--;
- if(i>;=0)
- {
- ivec[i]++;
- }
- }
- }
- }
- else
- {
- k++;
- if((i==k)&&(i==n-1))
- {
- num++;
- print(ivec,n);
- i--;
- ivec[i]++;
- if(ivec[i]==n)
- {
- i--;
- if(i>;=0)
- {
- ivec[i]++;
- }
- }
- k=0;
- }
- else if(i==k)
- {
- i++;
- ivec[i]=0;
- k=0;
- }
- }
- }
- return num;
- }
- int main()
- {
- int n,num;
- cin>;>;n;
- while(n>;0)
- {
- num=queen(n);
- cout<<endl<<"There is "<<num<<" answers."<<endl;
- cin>;>;n;
- }
- return 0;
- }
复制代码 |
|