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列格子组成,有的格子里有障碍物,不能走:有的格子是空地,可以走.给定一个迷宫,求从左上角走到右下角最 ...
随机推荐
- .mm c++ oc 混编
When you create a static library you don't link in the dependent libraries. As a result, when you re ...
- ADODB.Stream
读写文本文件时出现了乱码,找到了ADODB.Stream,可以指定字符集读取文本 Function ReadUTF() Filename = "F:\vba\2018 - new\2018- ...
- 黑苹果开启retina,大分辨率的方法
首先,管理分辨率RDM的软件这里下载: http://pan.baidu.com/s/1bpjL07P 在终端输入: curl -o ~/enable-HiDPI.sh https://raw.git ...
- MIUI 的参与感
最近这段时间在看小米联合创始人黎万强写的<参与感>这本书,看完我还挺有感触的.小米相信大家都一定有所耳闻. 2010 年 4 月 6 日 小米公司正式创立. 8 月 ...
- CentOS / RHEL 7 : Chrony V/s NTP (Differences Between ntpd and chronyd)
CentOS / RHEL 7 : Chrony V/s NTP (Differences Between ntpd and chronyd) Chosing between Chrony and N ...
- cogs——66. [HAOI2004模拟] 数列问题
66. [HAOI2004模拟] 数列问题 本以为会TLE,可... dfs水题(很基础) #include<bits/stdc++.h> using namespace std; ],a ...
- Linux之ssh中XSHELL无法连接解决方案
查漏补缺,理解概念,及时总结,互相交流,欢迎拍砖. 目前遇到的大致有以下几个问题分类: 网络是否连通.防火墙策略.DNS解析问题.端口是否开启.selinux是否开启-- 1.网络连通: 是否在同一网 ...
- ansible - playbook(剧组)
目录 ansible - playbook(剧组) 常用命令 五种传参方式 常用元素详解 tags handlers template when 循环 嵌套循环 ansible - playbook( ...
- PAT 1093. Count PAT's
The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and ...
- Codeforces 912D - Fishes
传送门:http://codeforces.com/contest/912/problem/D 本题是一个概率问题——求数学期望. 在一个n×m的方格中,有k个“*”.每个格子里可能有0~1个“*”. ...