文章

16

粉丝

0

获赞

54

访问

1.8k

头像
迷宫 题解:c语言,数组模拟队列
P1563 天津大学/南开大学机试题
发布于2026年3月17日 14:43
阅读数 6

#include <stdio.h>
#include <string.h>
struct node{
	int x,y;
	int step;
};

struct node q[10000]={0}; //模拟队列
char mpt [105][105];
int vis[105][105];
int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};//方向 
int bfs(int sx,int sy)
{
	memset(vis,0,sizeof(vis));
	int head=0,tail=0;//模拟队列的头和尾 
	q[tail++]= (struct node){sx,sy,0};//取起点加入队列 
	vis[sx][sy] = 1;//标记已经访问 
	int ans = -1;
	while(head<tail)//队列非空
	{
		struct node now =q[head++];//取出队列头节点 
		if(mpt[now.x][now.y]=='E')//循环终止条件 
		{
			ans = now.step;
			break;
		}	
		for(int i=0;i<4;i++)//取队列头节点的上下左右判断是否加入队列 
		{
			int nx = now.x+dir[i][0]; 
			int ny = now.y+dir[i][1];
			if((mpt[nx][ny] == '*' || mpt[nx][ny] == 'E') && vis[nx][ny] == 0)//判断是否能走,以及这个点标记过没有 
			{
				vis[nx][ny] = 1;//没有标记过就标记 
				q[tail++] = (struct node){nx,ny,now.step+1};//把这个点入队 
				
			}
		}
	} 
	return ans;
}
int main()
{
	int h,w;
	while(scanf("%d %d",&h,&w)!=EOF)
	{		
		if(h==0&...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发