8皇后问题(回溯)
2006-09-14 16:01
489 查看
递归版本:
#include <iostream>
#include <vector>
using namespace std;
const int N=8;
int a
;
//检验是否符合条件
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
;
//检验是否符合条件
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 <iostream>
#include <vector>
using namespace std;
const int N=8;
int a
;
//检验是否符合条件
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
;
//检验是否符合条件
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");
}
相关文章推荐
- hdu 2553 N皇后问题(回溯)
- 八皇后问题、N皇后问题回溯法详解
- 回溯法_n皇后问题
- 皇后问题 回溯
- 回溯算法—N皇后问题
- 【十一】递归与回溯--解决8皇后问题
- N皇后问题(回溯递归)
- n皇后问题-回溯法
- n-皇后问题 C++实现 回溯法
- 八皇后问题算法(回溯与递归算法)
- HDU 2553 N皇后问题 (DFS_回溯)
- hdoj 2553 N皇后问题【回溯+打表】
- n皇后问题(回溯与dfs)
- N皇后问题(回溯问题)
- N 皇后问题 回溯/深搜
- java实现回溯法解n皇后问题
- N皇后问题(递归+回溯)的C++实现
- HDU2553 N皇后问题(回溯)
- uva 639 Don't Get Rooked 变形N皇后问题 暴力回溯
- 经典回溯问题----n皇后