问题点出现在DFS函数中一个很小的地方,关于函数中DFS中的类型定义。
using namespace std;
int n;
int st[23][23];
int path[400];
int arr[23][23];
int xx[23];
int yy[23];
int len = 0;
int fx,fy;
int dx[4] = {1,0,-1,0};
int dy[4] = {0,1,0,-1};
bool Judge()
{
int sum = 0;
for(int i = 1;i <= n;i++)
{
sum += xx[i];
sum += yy[i];
}
return (sum == 0);
}
void DFS(int x,int y)
{
if(x == fx && y == fy)
{
if(Judge())
{
for(int i = 0;i < len;i++)
cout << path[i] << ' ';
}
return;
}
else
{
if(x == 1 && y == 1)
{
st[1][1] = 1;
path[len++] = 0;
xx[1]--;
yy[1]--;
}
for(int i = 0;i < 4;i++)
{
int nx = x + dx[i],ny = y + dy[i];
\\是的没错,问题点就在这里,我开始是是对nx和ny进行全局定义,但是程序结果一直报错不知道为什么,但是当我把int定义到DFS函数里面时,程序就能跑出来很神奇,但是不知道为什么崩溃了
if(!st[nx][ny])
{
if(arr[nx][ny] && xx[nx] && yy[ny])
{
st[nx][ny] = 1;
path[len++] = arr[nx][ny];
xx[nx]--;
yy[ny]--;
DFS(nx,ny);
st[nx][ny] = 0;
path[--len] = 0;
xx[nx]++;
yy[ny]++;
}
}
}
}
}
int main()
{
cin >> n;
for(int i = 1;i <= n;i++)
cin >> yy[i];
for(int i = 1;i <= n;i++)
cin >> xx[i];
for(int i = 1;i <= n;i++)
for(int j = 1;j <= n;j++)
arr[i][j] = n*(i-1) + (j-1);
fx = n;
fy = n;
DFS(1,1);
return 0;
}