很直接的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. 第36次ccf-csp题解(思维)

    比赛链接 https://sim.csp.thusaac.com/contest/36/home   比赛感受 这会刚打完上海icpc,比起区域赛的题,这个简单太多了. 感受还不错,写的很顺手.除了第 ...

  2. Qt数据库应用13-通用数据库分页

    一.前言 数据库分页展示,在所有的涉及到数据库记录的项目中都是需要的,除了简单的设备信息表.用户信息表这种很少几条几十条数据量的表除外,其余的日志记录表等都需要分页展示数据,少量的数据可以滚动条下拉查 ...

  3. Qt编写安防视频监控系统23-图片地图

    一.前言 图片地图这个模块是后面新增加进去的,主要是安防领域还有很多应用场景是一个区域比如就一个学校,提供一个学校的平面图或者鸟瞰图,然后在该地图上放置对应的摄像机,双击该摄像机图标可以查看对应的实时 ...

  4. SpringBoot集成swagger后出现: Failed to start bean ‘documentationPluginsBootstrapper‘的解决方法

    SpringBoot集成swagger后出现: Failed to start bean 'documentationPluginsBootstrapper'的编译错误: org.springfram ...

  5. Linux USB 文件读写性能测试

    USB 端口读写性能测试:========================================================读测试:sync && echo 3 > ...

  6. 密码应用——数字证书与PKI

    数字证书与PKI 数字证书  非对称加密体制中,公钥的获取途径非常重要.  验证数字签名.保密通信都需要保证公钥真实性 BOB的网站(假的) BOB的个人简介(盗用来的真实信息) Mallory ...

  7. (七).NET6.0部署RabbitMQ

    1.下载erlang语言包OTP.官网地址: https://www.erlang.org/downloads 2.Rabbitmq官网下载地址: https://www.rabbitmq.com/d ...

  8. 开箱你的 AI 语音女友「GitHub 热点速览」

    随着大模型 API 服务的不断丰富,开发者无需再依赖昂贵的硬件,也能轻松开发出拥有强大 AI 能力的应用.这不仅降低了技术门槛,也激发了极客们的创造力. 就比如上周飙升 1.5k Star 的开源项目 ...

  9. 连接Redis 错误的解决方法: It was not possible to connect to the redis server(s); to create a disconnected multiplexer

    The error you are getting is usually a sign that you have not set abortConnect=false in your connect ...

  10. ASP.NET Core 中使用 Redis 实现分布式缓存:Docker、IDistributedCache、StackExchangeRedis

    安装和配置docker (略)........... ASP.NET Core 使用分布式缓存 ASP.NET Core 中,支持使用多种数据库进行缓存,ASP.NET Core 提供了统一的接口给开 ...