奇怪的判断
  • 板块灌水区
  • 楼主osfly
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/2/6 18:29
  • 上次更新2023/11/5 03:38:29
查看原帖
奇怪的判断
339299
osfly楼主2021/2/6 18:29

我正在写鸣人与佐助这一道题,发现了一个奇怪的东西

#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

好家伙直接路过大蛇丸手下

由于蒟蒻太蒻,还请大佬告诉我为什么

2021/2/6 18:29
加载中...