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列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走.给定一个迷宫,求从左上角走到右下角最 ...
随机推荐
- ARM处理器的寄存器,ARM与Thumb状态,7中运行模式
** ARM处理器的寄存器,ARM与Thumb状态,7中运行模式 分类: 嵌入式 ARM处理器工作模式一共有 7 种 : USR 模式 正常用户模式,程序正常执行模式 FIQ模式(Fast ...
- PHP 之sha256 sha512封装
/* PHP sha256 sha512目前(PHP 7.1)没有内置的函数来计算,sha1() sha1_file() md5() md5_file()分别可以用来计算字符串和文件的sha1散列值和 ...
- Swift 3到5.1新特性整理
本文转载自:https://hicc.me/whats-new-in-swift-3-to-5-1/,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有. Hipo 2.0 重写从 Swif ...
- 【原】PHPExcel导出Excel
1.引入相关公共库PHPExcel 2.编写公共函数 public function exportExcel($excelTitle,$data,$filename='',$column_width= ...
- Python 索引切片
#负数开头,只有比负数大才有数据 num = [1,2,3,4,5,6,7,8,9,10] print(num[-5:5]) num = [1,2,3,4,5,6,7,8,9,10] print(nu ...
- 21.使用rescoring机制优化近似匹配搜索性能
一.match和phrase match(proximity match)区别 1.match:只要简单的匹配到了一个term,就会将term对应的doc作为 结果返回. 2.phrase ...
- BZOJ 2434 Luogu P2414 [NOI2011]阿狸的打字机 (AC自动机、树状数组)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2434 题解: 我写的是离线做法,不知道有没有在线做法. 转化一波题意,\(x\)在AC ...
- 更简单高效的HTML数据提取-Xpath
XPath 是一门在 XML 文档中查找信息的语言.XPath 用于在 XML 文档中通过元素和属性进行导航. 相比于BeautifulSoup,Xpath在提取数据时会更加的方便. 安装 在Pyth ...
- VNC Server Installation on CentOS 6.5
In my case I have a fresh installed CentOS6.5 Server on which I will be installing the VNC-server so ...
- hdu 1273最大流
#include<stdio.h> #include<string.h> #define inf 1000000000 #include<queue> #defin ...