dengzijun @ 2022-08-30 16:16:05
代码:
#include<cstdio>
#include<queue>
using namespace std;
struct node
{
int x,y;
};
int direction[4][2]=
{
{-1,0},
{0,-1},
{0,1},
{1,0}
};
int n,m;
char a[105][105];
bool visit[105][105];
bool ans_flag;
void dfs(int x,int y)
{
if(x==n&&y==m)
{
ans_flag=true;
return;
}
for(int i=0;i<4;i++)
{
int nx=x+direction[i][0],ny=y+direction[i][1];
if(nx<1||nx>n||ny<1||ny>m)
{
continue;
}
if(a[nx][ny]=='#'||visit[nx][ny])
{
continue;
}
visit[nx][ny]=true;
dfs(nx,ny);
//visit[nx][ny]=false;
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%s",a[i]+i);
}
visit[1][1]=true;
dfs(1,1);
if(ans_flag)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
return 0;
}
以及BFS版本:
#include<cstdio>
#include<queue>
using namespace std;
struct node
{
int x,y;
};
int direction[4][2]=
{
{-1,0},
{0,-1},
{0,1},
{1,0}
};
int n,m;
char a[105][105];
bool visit[105][105];
queue<node>q;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%s",a[i]+i);
}
q.push((node){1,1});
while(!q.empty())
{
node front=q.front();
q.pop();
int x=front.x;
int y=front.y;
if(visit[x][y])
{
continue;
}
visit[x][y]=true;
if(x==n&&y==m)
{
printf("Yes\n");
return 0;
}
for(int i=0;i<4;i++)
{
int nx=x+direction[i][0];
int ny=y+direction[i][1];
if(nx<1||nx>n||ny<1||ny>m)
{
continue;
}
if(a[nx][ny]=='#')
{
continue;
}
q.push((node){nx,ny});
}
}
printf("No\n");
return 0;
}
这些代码都只有40分,且只有2、3、4、9测试点是AC的。
by lzy2011 @ 2022-08-30 16:45:57
输入的问题吧
by lzy2011 @ 2022-08-30 16:48:30
for(int i=1;i<=n:++i){ for(intj=1;j<=m;++j)cin>>a[i][j]; }
by lzy2011 @ 2022-08-30 16:56:33
3 5 .##.# .....