源代码链接
https://blog.csdn.net/Junyi727/article/details/125024704
源代码如下:
void dfs(int x, int y, int st)
{
//当走满16就代表一个方案成立
if(st == 16)
{
ans++;
return ;
}
//上
if(x-1 >= 1 && !bk[x-1][y])
{
bk[x-1][y] = 1;
dfs(x-1, y, st+1);
bk[x-1][y] = 0;
}
//下
if(x+1 <= 4 && !bk[x+1][y])
{
bk[x+1][y] = 1;
dfs(x+1, y, st+1);
bk[x+1][y] = 0;
}
//左
if(y-1 >= 1 && !bk[x][y-1])
{
bk[x][y-1] = 1;
dfs(x, y-1, st+1);
bk[x][y-1] = 0;
}
//右
if(y+1 <= 4 && !bk[x][y+1])
{
bk[x][y+1] = 1;
dfs(x, y+1, st+1);
bk[x][y+1] = 0;
}
return ;
}
这是我写的代码:
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
void bfs(int x,int y,int st)
{
if(st==16)
{
sum++;return;
}
for(int k=0;k<4;k++)
{
int xx=x+dx[k],yy=y+dy[k];
if(xx<1||xx>4||yy<1||yy>4) break;
if(pd[xx][yy]==1)break;
pd[xx][yy]=1;
bfs(xx,yy,st+1);
pd[xx][yy]=0;
}
请问如何改正
不知道你这个问题是否已经解决, 如果还没有解决的话:摘自算法竞赛入门经典(第2版)