迷宫问题

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other)
Total Submission(s) : 46   Accepted Submission(s) : 28
Problem Description
定义一个二维数组:

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表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

 
Input
一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。
 
Output
左上角到右下角的最短路径,格式如样例所示。
 
Sample Input
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
 
Sample Output
(0, 0)
(1, 0)
(2, 0)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(3, 4)
(4, 4)
 
/*将表格排序,第一行为0,1,2,3,4第二行5,6,7,8,9,规则就是5*横坐标+纵坐标,得到的数除以五
得到横坐标,对五取余得到纵坐标,用数组的下标来记录这些数,数组里记录上一个数的下标,
方便查找,而第一个数存的是-1,表示结束*/
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int map[5][5],vis[30],pre[30];
int dx[4]={1,0,0,-1};
int dy[4]={0,1,-1,0};
void pr(int ans)
{
/*for(int i=0;i<30;i++)
printf("%d \n",pre[i]);*/
if(pre[ans]!=-1)/*从终点往回找,找到起点时开始输出*/
pr(pre[ans]);
printf("(%d, %d)\n",ans/5,ans%5);
}
int judge(int x,int y)
{
if(x<0||x>4||y<0||y>4)
return 0;
if(map[x][y]==1)
return 0;
return 1;
}
void bfs()
{
queue<int>q;
memset(vis,0,sizeof(vis));
pre[0]=-1;
vis[0]=1;/*标记已经使用过*/
q.push(0);
int now,next;
int x,y,nx,ny;
while(!q.empty())
{
now=q.front();
q.pop();
x=now/5;/*调用坐标*/
y=now%5;
for(int i=0;i<4;i++)
{
nx=x+dx[i];
ny=y+dy[i];
next=nx*5+ny;
if(judge(nx,ny)&&!vis[next])
{
pre[next]=now;
if(next==24)
return ;/*当查询到最后一个点时,结束*/
q.push(next);
vis[next]=1;
}
}
}
}
int main()
{
int i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&map[i][j]);
/*for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%d ",map[i][j]);
printf("\n");
}/*输出一遍表,看有没有输入错误*/
bfs();
pr(24);/*从最后一个点往回找*/
return 0;
}

hdoj--迷宫问题的更多相关文章

  1. HDOJ迷宫城堡(判断强连通 tarjan算法)

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission( ...

  2. BFS HDOJ 1728 逃离迷宫

    题目传送门 /* BFS:三维BFS,加上方向.用dp[x][y][d]记录当前需要的最少转向数 */ #include <cstdio> #include <algorithm&g ...

  3. hdoj 1272 小希的迷宫

    上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了 ...

  4. HDOJ(1728)逃离迷宫

    HDOJ 1728 http://acm.hdu.edu.cn/showproblem.php?pid=1728 BFS求最少转过的弯 #include <stdio.h> #includ ...

  5. 迷宫城堡--HDOJ 1269(Tarjan)

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  6. 迷宫城堡--HDOJ 1269

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  7. hdoj 1269 迷宫城堡【scc基础题目】

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  8. hdoj 1728 逃离迷宫

    逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  9. hdoj 1272 小希的迷宫 又一个并查集的简单应用

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  10. 【HDOJ 1272】小希的迷宫(并查集+无环图)

    描述 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道 ...

随机推荐

  1. Eclipse 每次ctrl-c ctrl-v 就变慢?

    继续闲着,所以继续写 大小: 60.7 KB 查看图片附件

  2. Get 和 Post

    理论: Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而 ...

  3. javascript基础(完整)

    一.什么是javascript? 是一种基于对象和事件驱动(以事件驱动的方式直接对客户端的输入做出响应,无需经过服务器端)并具有安全性能的解释型脚本语言,在web应用中得到非常广泛地应用.它不需要编译 ...

  4. JavaScript中字符串运算符的使用

    字符串运算符是用于两个字符串型数据之间的运算符,它的作用是将两个字符串连接起来.在JavaScript中,可以使用+和+=运算符对两个字符串进行连接运算.其中,+运算符用于连接两个字符串,而+=运算符 ...

  5. Verification之PSL之intro

    1 PSL - Property specification language 1.1 Property - Characteristics of the designs/verification e ...

  6. Assembly之instruction之Indirect Autoincrement Mode

    Assembler Code Content of ROMMOV @R10+,0(R11)   MOV @R10+,0(R11) Length: One or two words Operation: ...

  7. VHDL之code structure

     1 VHDL units VHDL code is composed of at least 3 fundamental sections: 1) LIBRARY declarations: Con ...

  8. EnforceLearning-主动强化学习

    前言: 被动学习Agent由固定的策略决定其行为.主动学习Agent必须自己决定采取什么行动. 具体方法是: Agent将要学习一个包含所有行动结果概率的完整模型,而不仅仅是固定策略的模型: 接下来, ...

  9. tee

    功能说明:把数据重定向到给定文件和屏幕上.   参数选项: -a  向文件追加内容,而不是覆盖.   tee命令允许标准输出同时把内容写入(覆盖)到文件中的实践.   tee命令允许标准输出同时把内容 ...

  10. swift里 as、as!、as?区别 T.Type与动态类型

    as 1.编译器进行类型转换合法性检查:静态 let cell = collectionView.dequeueReusableCell(withReuseIdentifier: shoppingLi ...