代码求改
  • 板块灌水区
  • 楼主封禁用户
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/1/21 15:43
  • 上次更新2024/1/21 17:32:29
查看原帖
代码求改
929285
封禁用户楼主2024/1/21 15:43
1. 迷宫寻宝(maze.cpp)
【问题描述】
在一个二维世界里,爬爬虫今天准备去寻宝。现在一个 n*n (n 行, n 列)的迷宫,存
在着一个入口、一些墙壁以及一个宝藏。由于迷宫是四连通的,即在迷宫中的一个位置,只
能走到与它直接相邻的其他四个位置(上、下、左、右)。现爬爬虫在迷宫的入口处(1,1),
问它最少需要走几步才能拿到宝藏?若永远无法拿到宝藏,则输出-1。
【输入格式】输入文件名为 maze.in。
第 1 行 1 个正整数 n,表示迷宫的大小。
接下来的 n*n 数据,数字 0 表示联通,数字 1 表示墙壁,数字 2 表示宝藏位置(数据保证
宝藏位置不在起点);
【输出格式】输出文件名为 maze.out。
输出一个整数,即最少步数,如果拿不到宝藏,则输出-1;
【输入输出样例 1】
maze.in
5
0 0 1 0 1
0 1 2 1 1
0 0 0 0 1
1 0 0 0 0
1 1 0 0 1
maze.out
5
【输入输出样例 2】
maze.in
4
0 0 0 1
1 1 0 1
0 0 1 0
2 0 1 0
maze.out
-1
【数据说明】
对于 40% 的数据,1<=n<=10;
对于 100% 的数据,1<=n<=1000;

代码:

#include<bits/stdc++.h>

using namespace std;

struct node{
	int x,y,step;  
}head;   

int maze[110][110],n,m,x,y;
queue<node>q;
int Next[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
bool f=0;

void init()
{
	cin>>n;
	for (int i=1;i<=n;++i)
		for (int j=1;j<=n;++j)
			cin>>maze[i][j];
}
void bfs()
{
	q.push(node{1,1,0});     
	maze[1][1]=1;
	while (!q.empty())
	{
		for (int i=0;i<4;++i)
		{
			x=q.front().x+Next[i][0];y=q.front().y+Next[i][1];  
			if ((x<=n)&&(x>=1)&&(y<=n)&&(y>=1)&&maze[x][y]==0)
			{
				node tail;
				tail.x=x;tail.y=y;tail.step=q.front().step+1;  
				q.push(tail); 
				maze[x][y]=1;   
				if (maze[x][y]==2) 
				{
					f=1;
					cout<<tail.step; 
					break ;
				}
			}
		}
		q.pop();
	}  
}
int main()
{
	init();
	bfs();
	if (f==0) cout<<"-1"<<endl;
	return 0;
}

运行结果一直都是“-1”

2024/1/21 15:43
加载中...