4
。。。。
。。。X
。。X X
。X X X
你的程序是3,正确的是4
建议用深搜加回溯求,或二分图
我AC的代码
#include
using namespace std;
char map[10][10];
int n,maxNum;
bool search(int row,int col)
{
int i;
for(i=row-1;i>=0;i--)
{
if(map[i][col]=='0') return false;
if(map[i][col]=='X') break;
}
for(i=col-1;i>=0;i--)
{
if(map[row][i]=='0')return false;
if(map[row][i]=='X')break;
}
return true;
}
void solve(int k,int curNum)
{
int x,y;
if(k==n*n){
if(curNum>maxNum) maxNum=curNum;
}
else{
x=k/n;
y=k%n;
if(map[x][y]=='.'&&search(x,y)==true)
{
map[x][y]='0';
solve(k+1,curNum+1);
map[x][y]='.';
}
solve(k+1,curNum);
}
}
int main()
{
int i,j;
while(cin>>n&&n)
{
for(i=0;i
maxNum=0;
solve(0,0);
cout<
}