sdut1269 走迷宫(dfs)
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1269
连着做了三个基本的dfs,终于弄懂了搜索和回溯的过程。
此题要求输出所有路径,首先给每一个点编号0~n+m;则存储时只需存储编号,由编号得到坐标的方式: x = num/m, y = num%m; 由坐标得到编号的方式:num = x*m+y;
注意:本题坐标从(1,1)开始,编号后的坐标从(0,0)开始。
#include <stdio.h>
#include <string.h>
const int Max = ;
int map[Max][Max],vis[Max][Max];
int dir[][] = {{,-},{-,},{,},{,}};//搜索方向,按题意必须是左上右下的顺序
int num[Max*Max],row,col,e_x,e_y,step,flag; void dfs(int x, int y)
{
if(x==e_x-&&y==e_y-)//到达终点就输出此时的路径
{
flag = ;
for (int i = ; i < step; i++)
{
int xx = num[i]/col+;
int yy = num[i]%col+;
printf("(%d,%d)->",xx,yy);
}
printf("(%d,%d)\n",e_x,e_y);
return ;
}
for(int i = ; i < ; i++)
{
int xx = x+dir[i][];
int yy = y+dir[i][];
if(map[xx][yy] == &&xx>=&&yy>=&&xx<row&&yy<col&&!vis[xx][yy])
{
step++;
vis[xx][yy] = ;
num[step] = xx*col+yy;
dfs(xx,yy);
step--;//回溯时去掉路径中重复的点
vis[xx][yy] = ;//恢复现场
} }
}
int main()
{
int s_x,s_y;
flag = ;
step = ;
scanf("%d %d",&row,&col);
memset(vis,,sizeof(vis));
for (int i = ; i < row; i++)
for (int j = ; j < col; j++)
{
scanf("%d",&map[i][j]);
}
scanf("%d %d",&s_x,&s_y);
scanf("%d %d",&e_x,&e_y);
num[] = (s_x-)*col + (s_y-);
vis[s_x-][s_y-] = ;
dfs(s_x-,s_y-);
if (!flag)
puts("-1");
return ; }
sdut1269 走迷宫(dfs)的更多相关文章
- NYOJ306 走迷宫(dfs+二分搜索)
题目描写叙述 http://acm.nyist.net/JudgeOnline/problem.php?pid=306 Dr.Kong设计的机器人卡多非常爱玩.它经常偷偷跑出实验室,在某个游乐场玩之不 ...
- luogu P1238 走迷宫--DFS模板好(水)题
题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...
- openjudge走迷宫(DFS)
题目: 描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走. 给定一个迷宫,求从左上角走到右下角最少需要走多少步(数据保证一定能走到).只能在水平方向或垂直方向走,不 ...
- 走迷宫(DFS)
题目:http://acm.sdut.edu.cn/sdutoj/showproblem.php?pid=2449&cid=1181 目前dfs 里的递归还是不很懂,AC代码如下: #incl ...
- HDU_1010——小狗走迷宫DFS
Problem Description The doggie found a bone in an ancient maze, which fascinated him a lot. However, ...
- sdut 2449走迷宫【最简单的dfs应用】
走迷宫 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_ 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m) ...
- HDU 2102 A计划(BFS/DFS走迷宫)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 数据结构之 栈与队列--- 走迷宫(深度搜索dfs)
走迷宫 Time Limit: 1000MS Memory limit: 65536K 题目描述 一个由n * m 个格子组成的迷宫,起点是(1, 1), 终点是(n, m),每次可以向上下左右四个方 ...
- 百炼3752:走迷宫--栈实现dfs
3752:走迷宫 总时间限制: 1000ms 内存限制: 65536kB 描述 一个迷宫由R行C列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走.给定一个迷宫,求从左上角走到右下角最 ...
随机推荐
- Centos 安装配置iscsi
在测试oracle rac的时候用iscsi来模拟磁阵的(真的磁阵需要多路径软件),简单的记录下 #scsi server yum install scsi-target-utils service ...
- IDEA生成增强for循环
itar 生成array for代码块 for (int i = 0; i < array.length; i++) { = array[i]; } itco 生成Collection迭代 fo ...
- iview Table表格单选框互斥
表格中添加单选框,并且互斥 首先带data中定义 currentid : 0 :表示默认不选中 { title: "名称", key: "name", re ...
- vim使用配置-python
安装vundle git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim 添加配置文件 vim ~/.v ...
- python 易忘操作整理
>>> l=[1,2,3,4,5] >>> s='$'.join(str(i) for i in l) >>> print(s,end=" ...
- Python基础-while奇数和
利用while循环计算100*座位号 以内奇数的和. n = 1 s = 0 SeatID=1 while n <= 100*SeatID: s += n n += 2 print '奇数的和: ...
- https://github.com/MediaTek-Labs/linkit-smart-7688-feed编译失败
mkdir -p /home/fly/workdir/LinkltSmart7688Duo-20170626/openwrt/dl/home/fly/workdir/LinkltSmart7688Du ...
- Maven学习总结(7)——eclipse中使用Maven创建Web项目
Maven学习总结(七)--eclipse中使用Maven创建Web项目 一.创建Web项目 1.1 选择建立Maven Project 选择File -> New ->Project,如 ...
- Struts2 值栈总结(ValueStack)
1.获取值栈 //获取值栈的第一种方式 ValueStack valueStack1 = (ValueStack) ServletActionContext.getRequest().getAttri ...
- SSM框架下实现导入功能
何叫导入?简单说,导入就是把excel表格里的数据插入到数据库里.我这里做的是支持.xls和.xlsx格式. 因为是自己做案例记录,那些jar包什么的就不细说了,主要讲实现和步骤,看代码: 先在你的项 ...