很直接的dfs。递归+栈——不知道以后会不会生疏

进入一次dfs,相当于走一步,入栈;结束一次dfs,相当于这一步考虑结束,出栈

笑死,y1竟然是一个函数

突然发现写的有点槽,可以把dfs形式化为“走一格”,map的填充可以放在dfs的首尾,而不用在每个if里写一遍。有空再改一下。

题目描述

输入一个n*m的01矩阵作为01迷宫,并给定他的起点与终点,求出他不同逃跑路线的数目(不同逃跑路线中可以有相同的部分,但是不能完全相同)。

输入格式

前两行输入两个整数n和m(n、m均为正整数并且小于等于7),分别代表01矩阵行数和列数。接下来的n*m行,每行输入1个整数(0或1),对应着01矩阵各个元素值(按行输入)。接下来的四行分别代表迷宫的起点和终点,每行一个整数,分别代表起点与终点行数和列数。

输出格式

输出每种走法的路径。最终输出一个整数,代表逃跑路线的数目。

#include<stdio.h>
#include<string.h> int N,M;
int map[8][8];
int x1,y1,x2,y2;
int cnt = 0;
char stack[100][30];
int top = -1; int isAble(int x, int y){ return 0<=x && x<N && 0<=y && y<M && map[x][y]==0; } void dfs(int x,int y){
char tmp[30];
sprintf(tmp,"(%d,%d)",x,y);
top++; strcpy(stack[top],tmp); if(x == x2 && y == y2){
cnt++; for(int i=0;i<=top;++i) {
printf("%s",stack[i]);
}puts(""); stack[top--];
return;
}
if(isAble(x+1, y)) {
map[x+1][y] = 1;
dfs(x+1, y);
map[x+1][y] = 0;
}
if(isAble(x-1, y)){
map[x-1][y] = 1;
dfs(x-1, y);
map[x-1][y] = 0;
}
if(isAble(x, y+1)){
map[x][y+1] = 1;
dfs(x, y+1);
map[x][y+1] = 0;
}
if(isAble(x, y-1)){
map[x][y-1] = 1;
dfs(x, y-1);
map[x][y-1] = 0;
} stack[top--];
return;
} int main(){
scanf("%d%d",&N,&M);
for(int i=0;i<N;++i) for(int j=0;j<M;++j)
scanf("%d",&map[i][j]);
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
x1 = x1 - 1; x2 = x2 - 1;
y1 = y1 - 1; y2 = y2 - 1; dfs(x1,y1);
printf("%d",cnt);
return 0 ;
}

【练习回顾】dfs迷宫+路径打印的更多相关文章

  1. POJ 3984 迷宫问题(简单bfs+路径打印)

    传送门: http://poj.org/problem?id=3984 迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions ...

  2. Minimum Transport Cost HDU1385(路径打印)

    最短路的路径打印问题 同时路径要是最小字典序 字典序用floyd方便很多 学会了两种打印路径的方法!!! #include <stdio.h> #include <string.h& ...

  3. ZOJ 1076 Gene Assembly(LIS+路径打印 贪心)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=76 题目大意:在一个DNA上,给定许多基因的起始位置和结束位置,求出这 ...

  4. 哈密顿绕行世界问题(dfs+记录路径)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2181 哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others) ...

  5. L2-001 紧急救援 (25 分) (最短路+路径打印)

    链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 题目: 作为一个城市的应急救援队伍的负 ...

  6. BFS和DFS记录路径

    DFS记录路径的意义好像不大,因为不一定是最短的,但是实现起来却很简单. #include<math.h> #include<stdio.h> #include<queu ...

  7. 代码实现:从键盘输入接收一个文件夹路径,打印出该文件夹下所有的.java文件名

    package com.loaderman.test; import java.io.File; import java.io.FileReader; import java.util.Scanner ...

  8. DFS迷宫递归所有路径 新手入门

    这篇文章写给自己以后复习和个个入门朋友:提示同学们一定耐心看完解释 哪怕看得很难受,我是新手我懂大家的心烦.看完后慢慢体会代码 我们假设迷宫为如下状况:         {0,0,1,0}       ...

  9. [poj]2488 A Knight's Journey dfs+路径打印

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 45941   Accepted: 15637 Description Bac ...

  10. 九度OJ 1090:路径打印 (树、DFS)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1704 解决:314 题目描述: 给你一串路径,譬如: a\b\c a\d\e b\cst d\ 你把这些路径中蕴含的目录结构给画出来,子目 ...

随机推荐

  1. pip 安装 Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1123)'))

    1.问题 1.1 问题截取 pip install redis -i https://pypi.tuna.tsinghua.edu.cn/simple Looking in indexes: http ...

  2. shell 获取进程号

    # Shell最后运行的后台PID(后台运行的最后一个进程的进程ID号) $! # Shell本身的PID(即脚本运行的当前进程ID号 $$

  3. mac上遇到的错误sed command a expects followed by text

    上简单的替换操作 sed -i 's/apple/mac/g' full-path-file 执行后报错,"sed: 1: command a expects \ followed by t ...

  4. Qt/C++音视频开发79-采集websocket视频流/打开ws开头的地址/音视频同步/保存到MP4文件/视频回放

    一.前言 随着音视频的爆发式的增长,各种推拉流应用场景应运而生,基本上都要求各个端都能查看实时视频流,比如PC端.手机端.网页端,在网页端用websocket来接收并解码实时视频流显示,是一个非常常规 ...

  5. Qt编写linux系统onvif工具(支持预览/云台/预置位/录像等)

    一.功能特点 广播搜索设备,支持IPC和NVR,依次返回. 可选择不同的网卡IP进行对应网段设备的搜索. 依次获取Onvif地址.Media地址.Profile文件.Rtsp地址. 可对指定的Prof ...

  6. Qt编写ffmpeg本地摄像头显示(16路本地摄像头占用3.2%CPU)

    一.前言 内核ffmpeg除了支持本地文件.网络文件.各种视频流播放以外,还支持打开本地摄像头,和正常的解析流程一致,唯一的区别就是在avformat_open_input第三个参数传入个AVInpu ...

  7. 关于QCustomPlot超级图表的一些冷知识点

    开源的图表控件QCustomPlot很经典,作者至少是八星斗圣级别,在曲线数据展示这块性能彪悍,总结了一些容易忽略的经验要点. 可以将XY轴对调,然后形成横向的效果,无论是曲线图还是柱状图,分组图.堆 ...

  8. Qt编写可视化大屏电子看板系统20-横向分组图

    一.前言 横向分组图是柱状分组图的横向展示,有了横向柱状图加上分组图的绘制经验,这个做起来就比较简单了,横向的设置规则按照横向柱状图来,分组的规则按照柱状分组图的算法来,在横向的柱子中要绘制对应的值, ...

  9. 启动redis失败Could not create server TCP listening socket 127.0.0.1:6379:bind:操作成功

    问题: 启动redis失败Could not create server TCP listening socket 127.0.0.1:6379:bind:操作成功 解决方法: 在命令行提示符C:\P ...

  10. 高通MSM8909 Mutil-HAL Sensor 调试

    Mutil-HAL的介绍: Sensors Multi-HAL 是一个框架,允许传感器 HAL 与其他传感器 HAL 一起运行. Sensors Multi-HAL 动态加载作为动态库存储在供应商分区 ...