我正在写鸣人与佐助这一道题,发现了一个奇怪的东西
#include<cstdio>
int M,N,T;
char g[200][200];
bool vis[200][200];
int nxtx[4]={0,1,0,-1};
int nxty[4]={1,0,-1,0};
int sx,sy;
int minn=0x3f3f3f;
bool flag;
void dfs(int x,int y,int time,int ckl)
{
if(time>minn) return ;
if(g[x][y]=='+')
{
if(time<minn) minn=time;
flag=true;
return ;
}
vis[x][y]=true;
for(int i=0;i<4;i++)
{
int nx=x+nxtx[i];
int ny=y+nxty[i];
if(nx<0||ny<0||nx>=M||ny>=N||vis[nx][ny]) continue;
if(g[nx][ny]=='#')
{
if(ckl>0) dfs(nx,ny,time+1,ckl-1);
}
else dfs(nx,ny,time+1,ckl);
}
vis[x][y]=false;
}
int main()
{
scanf("%d%d%d",&M,&N,&T);
for(int i=0;i<M;i++)
for(int j=0;j<N;j++)
{
scanf(" %c",&g[i][j]);
if(g[i][j]=='@')
{
sx=i;
sy=j;
}
}
dfs(sx,sy,0,T);
if(!flag) printf("-1");
else printf("%d",minn);
return 0;
}
输入:
4 4 1
#@##
**##
###+
****
在这段代码输出6(正常) 但是把
if(g[nx][ny]=='#')
{
if(ckl>0) dfs(nx,ny,time+1,ckl-1);
}
else dfs(nx,ny,time+1,ckl);
改成
if(g[nx][ny]=='#'&&ckl>0) dfs(nx,ny,time+1,ckl-1)
else dfs(ns,ny,time+1,ckl)
就会输出4
之后我把vis输出,得到:
0100
0100
0110
0000
好家伙直接路过大蛇丸手下
由于蒟蒻太蒻,还请大佬告诉我为什么