测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A45682. 迷宫问题定义一个二维数组:int maze[5][5] = {0, 1, 0, 0, 0,0, 1, 0, 1, 0,0, 0, 0, 0, 0,0, 1, 1, 1, 0,0, 0, 0, 1, 0,};它表示一个迷宫, 其中的 1 表示墙壁, 0 表示可以走的路, 只能横着走或竖着走, 不能斜着走, 要求编程序找出从左上角到右下角的最短路线。输入一个 5 × 5 的二维数组, 表示一个迷宫。…

填空题 困难

题目描述

迷宫问题

定义一个二维数组:

int maze[5][5] = {

0, 1, 0, 0, 0,

0, 1, 0, 1, 0,

0, 0, 0, 0, 0,

0, 1, 1, 1, 0,

0, 0, 0, 1, 0,

};

它表示一个迷宫, 其中的 1 表示墙壁, 0 表示可以走的路, 只能横着走或竖着走, 不能斜着走, 要求编程序找出从左上角到右下角的最短路线。

输入

一个 5 × 5 的二维数组, 表示一个迷宫。 数据保证有唯一解。

输出

左上角到右下角的最短路径, 格式如样例所示。

样例输入

0 1 0 0 0

0 1 0 1 0

0 0 0 0 0

0 1 1 1 0

0 0 0 1 0

样例输出

(0, 0)

(1, 0)

(2, 0)

(2, 1)

(2, 2)

(2, 3)

(2, 4)

(3, 4)

(4, 4)

参考答案

#include<cstdio> #include<iostream> #include<queue> using namespace std; typedef long long ll; int m[4][2]={1,0,0,1,-1,0,0,-1}; int s[10][10],vis[10][10]; struct node{ int x,y; }step[10][10]; void print(node p){ if(p.x==0 && p.y==0){ printf("(0, 0)\n"); return; } print(step[p.x][p.y]); printf("(%d, %d)\n",p.x,p.y); } void bfs(){ fill(vis[0],vis[0]+10*10,0); node a,b; queue<node>q; a.x=0,a.y=0; vis[0][0]=1; q.push(a); while(!q.empty()){ a=q.front(); q.pop(); if(a.x==4 && a.y==4){ print(a); break; } for(int i=0;i<4;i++){ b.x=a.x+m[i][0],b.y=a.y+m[i][1]; if(s[b.x][b.y]==0 && b.x>=0 && b.y<5 && b.x>=0 && b.y<5 && !vis[b.x][b.y]){ vis[b.x][b.y]=1; step[b.x][b.y]=a; q.push(b); } } } } int main(){ for(int i=0;i<5;i++){ for(int j=0;j<5;j++) cin>>s[i][j]; } bfs(); return 0; }
上一题 下一题