8皇后问题(回溯)
来源:互联网 发布:python字典get后加一 编辑:程序博客网 时间:2024/05/22 12:47
递归版本:
#include <iostream>
#include <vector>
using namespace std;
const int N=8;
int a[N][N];
//检验是否符合条件
bool check(int n,int i,int j)
...{
int k,l;
for (k=0;k<n;k++)
for (l=0;l<n;l++)
...{
if ((i==k)&&(j==l)) continue;
if (a[k][l]==1)
if ( (abs(i-k)==abs(j-l))||(i==k)||(j==l))
...{
return false;
}
}
return true;
}
void Backtrack( int n, int i)
...{
int j;
if (i>n-1)
...{
for (i=0;i<n;i++)
...{
for (j=0;j<n;j++)
...{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
}
else
...{
for (j=0;j<n;j++)
...{
a[i][j]=1;
if (check(n,i,j))
...{
Backtrack(n,i+1);
}
a[i][j]=0;
}
}
}
int main()
...{
int i,j;
Backtrack(N,0);
system("pause");
}
#include <vector>
using namespace std;
const int N=8;
int a[N][N];
//检验是否符合条件
bool check(int n,int i,int j)
...{
int k,l;
for (k=0;k<n;k++)
for (l=0;l<n;l++)
...{
if ((i==k)&&(j==l)) continue;
if (a[k][l]==1)
if ( (abs(i-k)==abs(j-l))||(i==k)||(j==l))
...{
return false;
}
}
return true;
}
void Backtrack( int n, int i)
...{
int j;
if (i>n-1)
...{
for (i=0;i<n;i++)
...{
for (j=0;j<n;j++)
...{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
cout<<endl;
}
else
...{
for (j=0;j<n;j++)
...{
a[i][j]=1;
if (check(n,i,j))
...{
Backtrack(n,i+1);
}
a[i][j]=0;
}
}
}
int main()
...{
int i,j;
Backtrack(N,0);
system("pause");
}
非递归版本:
#include <iostream>
#include <vector>
using namespace std;
const int N=8;
int a[N][N];
//检验是否符合条件
bool check(int n,int i,int j)
...{
int k,l;
for (k=0;k<n;k++)
for (l=0;l<n;l++)
...{
if ((i==k)&&(j==l)) continue;
if (a[k][l]==1)
if ( (abs(i-k)==abs(j-l))||(i==k)||(j==l))
...{
return false;
}
}
return true;
}
void Backtrack( int n)
...{
int i=0;
int j=0;
while(i>=0)
...{
for(; j < n; j++)
...{
a[i][j]=1;
if (check(n, i, j))
...{
if (i>=n-1)
...{
for (int x=0;x<n;x++)
...{
for (int y=0;y<n;y++)
...{
cout<<a[x][y]<<" ";
}
cout<<endl;
}
cout<<endl;
a[i][j]=0;
}
else
...{
i++;
j=-1;
}
}
else
...{
a[i][j]=0;
}
}
i--;
for (j = 0; j < n; j++)//找到上一列排到哪了
if (a[i][j]==1)
...{
a[i][j]=0;
j++;
break;
}
}
}
int main()
...{
int i,j;
Backtrack(N);
system("pause");
}
#include <vector>
using namespace std;
const int N=8;
int a[N][N];
//检验是否符合条件
bool check(int n,int i,int j)
...{
int k,l;
for (k=0;k<n;k++)
for (l=0;l<n;l++)
...{
if ((i==k)&&(j==l)) continue;
if (a[k][l]==1)
if ( (abs(i-k)==abs(j-l))||(i==k)||(j==l))
...{
return false;
}
}
return true;
}
void Backtrack( int n)
...{
int i=0;
int j=0;
while(i>=0)
...{
for(; j < n; j++)
...{
a[i][j]=1;
if (check(n, i, j))
...{
if (i>=n-1)
...{
for (int x=0;x<n;x++)
...{
for (int y=0;y<n;y++)
...{
cout<<a[x][y]<<" ";
}
cout<<endl;
}
cout<<endl;
a[i][j]=0;
}
else
...{
i++;
j=-1;
}
}
else
...{
a[i][j]=0;
}
}
i--;
for (j = 0; j < n; j++)//找到上一列排到哪了
if (a[i][j]==1)
...{
a[i][j]=0;
j++;
break;
}
}
}
int main()
...{
int i,j;
Backtrack(N);
system("pause");
}
- 8皇后问题(回溯)
- 回溯: 8皇后问题
- 算导4(8皇后-回溯问题)
- 回溯法解决2n皇后(8皇后)问题
- 8皇后问题-回溯方法
- 回溯法---->8-皇后问题
- 8皇后问题------回溯法
- 8皇后问题-回溯方法
- N皇后问题(回溯)
- N皇后问题(回溯)
- 八皇后问题(回溯)
- 八皇后问题(回溯)
- 八皇后问题(回溯)
- n皇后问题(回溯)
- 八皇后问题(回溯)
- 回溯(八皇后问题)
- 递归-回溯法求解8皇后问题(C)
- 8皇后问题--回溯法 (循环递归)
- 初识CVS
- Thinksea HtmlRotator 是一个用于轮换显示HTML内容的控件。
- 十年后,ELM会不会创造SOA现在所创造的局面?
- 用一句SQL取出第 m 条到第 n 条记录的方法
- 窗口自动降落
- 8皇后问题(回溯)
- .NET反射的简单示例
- .NET关于操作进程的简单示例
- Proceduce Export Table To Excel
- 【BUG】asp.net无法调试,错误代码0x8013134b
- 060914随笔
- [转贴] sscanf函数的高级用法
- Beej's 网络编程指南 [转]
- 网络字节顺序和机器顺序什么区别[转]