请问有没有大佬帮忙de一下bug?
c吧
全部回复
仅看楼主
level 1
熹昀6 楼主
题目是经典的zoj1002(碉堡题)思路就是很简单的一个DFS+剪枝,关于限制条件就是在访问点以前的x,y方向是否会打到碉堡。然后就是经典的判断条件(满足是空地以及限制函数)之后改变+进一步dfs+还原现场。但是就是跑不对,求大佬解惑。
代码如下:
#include <iostream>
using namespace std;
char map[5][5]; //建立碉堡图
int ibest = 0, n;
int x, y;
bool judge(int x, int y)//由于是逐渐向后的所以只需要检查前面就可以了
{
for (int i = x; i >= 0; i--)
{
if (map[i][y] == 'X') break;
if (map[i][y] == 'O') return false;
}
for (int i = y; i >= 0; i--)
{
if (map[x][i] == 'X') break;
if (map[x][i] == 'O') return false;
}
return true;
}
void canset(int k, int max)
{
if (max > ibest) ibest = max;
if (k > n * n) return;//结束条件,注意是由0为角标开始
x = k % n;
y = k / n;
if (map[x][y] = '.' && judge(x, y))
{
map[x][y] = 'O';
canset(k + 1, max + 1);
map[x][y] = '.';
}
canset(k + 1, max);
}
int main()
{
int k = 0;
cin >> n;
for (int i = 0; i < n; i++) {
for(int j=0;j<n;j++)
cin >> map[i][j];
}
canset(0, 0);
cout << ibest << endl;
}
运行结果:
4
.X..
... X
X..
....
6(正确5)
2
XX
.X
3(正确1)
2024年07月17日 13点07分 1
1