八皇后问题的一个变种
学习了洞庭散人的代码,循着他的思路,最后写得基本和他一样了....
http://www.cnblogs.com/phinecos/archive/2008/09/18/1293017.html
#include <iostream>
using namespace std;
char map[5][5];
int Count,N;
bool isOk(int row, int col)
{
int t;
for(t=row-1;t>=0;t--)
{
if(map[t][col] == 'O') return false;
if(map[t][col] == 'X') break;
}
for(t = col-1;t>=0;t--)
{
if(map[row][t] == 'O') return false;
if(map[row][t] == 'X') break;
}
return true;
}
void City(int k, int CNum)
{
int i,j;
if(k == N*N)
{
if(CNum > Count)
Count = CNum;
return;
}
else
{
i = k / N;//行号
j = k % N;//列号
if(isOk(i,j) && map[i][j] == '.')
{
map[i][j] = 'O';
City(k+1,CNum+1);
map[i][j] = '.';//key要回溯!!!
}
City(k+1,CNum);
}
}
int main()
{
while(cin>>N && N > 0)
{
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
cin>>map[i][j];
Count = 0;
City(0,0);//第一个参数必须从0开始,而非1
cout<<Count<<endl;
}
//system("pause");
return 0;
}