帮忙看看,为什么暴搜错了,有没有特殊的例子???题目是http:⼀⼀acm.hdu.edu.cn⼀showproblem.php?pid=104

2024-12-14 16:08:06
推荐回答(1个)
回答1:

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 for(j=0;j cin>>map[i][j];
maxNum=0;
solve(0,0);
cout< }
}