思路:
关键在于怎么记录返回的路径.比如题目给出的第一个样例

这里从1出发,我们的dfs函数最终会搜到6,这时候我们其他点都被标记为已访问,所以dfs函数就会一层一层的返回,先是返回到点5,然后是点4,所以我们可以直接记录下返回路径.

dfs(i)下面就是代表返回的位置,在这里记录返回的点也就是s. 每一层的s都不同,当达到6的时候s就代表5.

然后就是不联通的情况:


这里从6出发,到搜到最后会是在5这个点,然后一层一层返回.所以path数组记录的是6 4 5 4 6,然后我们最后判断下是否所有点被标记过,若不是最后输出一个0 .

代码:

import java.io.*;
import java.util.StringTokenizer;public class S7_15 {static int n, m, start;static int G[][] = new int[1005][1005]; // 存放边static int vis[] = new int[1005]; // 看该节点是否被访问static int path[] = new int[2005]; // 存放路径 有可能重复所以开2005static int pathIndex; // 记录路径的下标static boolean ok = true; // 判断该图是否连通图public static void main(String[] args) throws IOException {S15.init(System.in);n = S15.nextInt();m = S15.nextInt();start = S15.nextInt();for (int i = 0; i < m; i++) {int a = S15.nextInt();int b = S15.nextInt();G[a][b] = G[b][a] = 1;}vis[start] = 1; // 标记起点为已经访问path[pathIndex++] = start; // 记录起点路径dfs(start);// 打印结果for (int i = 1; i <= n; i++) {if (vis[i] == 0) {// 表明节点未访问过ok = false; // 代表不是联通图break;}}if (ok) {System.out.print(path[0]);for (int i = 1; path[i] != 0; i++) {System.out.print(" " + path[i]); // 这里先打印空格就不会出现最后保留空格的情况了}} else {for (int i = 0; path[i] != 0; i++) {System.out.print(path[i] + " ");}System.out.print("0");}}static void dfs(int s) {for (int i = 1; i <= n; i++) {if (G[s][i] == 1 && vis[i] == 0) { // 有边且未访问过vis[i] = 1; // 标记为已访问path[pathIndex++] = i;dfs(i);// 上面完成 后到这一步代表是从后面返回 所以记录返回路径path[pathIndex++] = s; // 每一函数 返回路径都是s("起点")// 不用回溯 vis了 因为要么找到路 要么没有找到. 找到路也要返回 没有找到也要返回. 如果回溯有可以访问这个节点了}}}}class S15 {static BufferedReader reader;static StringTokenizer tokenizer;static void init(InputStream input) {reader = new BufferedReader(new InputStreamReader(input));tokenizer = new StringTokenizer("");}static String next() throws IOException {while (!tokenizer.hasMoreTokens()) {tokenizer = new StringTokenizer(reader.readLine());}return tokenizer.nextToken();}static int nextInt() throws IOException {return Integer.parseInt(next());}
}
#include<iostream>
#include<string.h>
using namespace std;
int arr[1005][1005];
int vis[1005];
int n,m,s;
int count;
bool flag=false;void dfs(int now){if(count==n){cout<<now<<' ';flag=true;return;}cout<<now<<' ';for(int i=1;i<=n;i++){if(arr[now][i]==1&&vis[i]==0){count++;vis[i]=1;dfs(i);if(now==s){cout<<now;}else cout<<now<<' ';}}return;}
int main(){int x,y;memset(arr,0,sizeof(arr));memset(vis,0,sizeof(vis));cin>>n>>m>>s;for(int i=0;i<m;i++){cin>>x>>y;arr[x][y]=1;arr[y][x]=1;}vis[s]=1;count=1;dfs(s);if(!flag) cout<<' '<<0;return 0;
}

7-15 地下迷宫探索相关推荐

  1. 地下迷宫探索 java_Java 8:探索可能性

    地下迷宫探索 java 从嵌入式到云,使用Java 8实现. 包含Java SE 8和Java ME 8的Java 8可能是Java平台最重要的扩展. Lambda表达式和Stream API增强了平 ...

  2. 7-33 地下迷宫探索 (30 分)(思路加详解)

    一:题目 7-33 地下迷宫探索 (30 分) 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰 ...

  3. 7-2 地下迷宫探索 (30 分)(C语言实现)

    7-2 地下迷宫探索 (30 分) 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争 ...

  4. 7-9 地下迷宫探索 (8 分)

    7-9 地下迷宫探索 (8 分) 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生 ...

  5. 7-2 地下迷宫探索

    7-2 地下迷宫探索 分数 30 全屏浏览题目 切换布局 作者 DS课程组 单位 浙江大学 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村 ...

  6. pta 地下迷宫探索

    5-5 地下迷宫探索   (30分) 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战 ...

  7. 7-2 地下迷宫探索 (30分)

    ** 7-2 地下迷宫探索 (30分) ** 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦 ...

  8. PTA 6-7-1 地下迷宫探索

    6-7-1 地下迷宫探索 (30分) 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战 ...

  9. 数据结构PTA 案例6-1.4 地下迷宫探索

    案例6-1.4 地下迷宫探索 题目 解法 题目 假设有一个地下通道迷宫,它的通道都是直的,而通道所有交叉点(包括通道的端点)上都有一盏灯和一个开关.请问你如何从某个起点开始在迷宫中点亮所有的灯并回到起 ...

  10. 【后两个测试点】地下迷宫探索 (30 分)

    立志用最少的代码做最高效的表达 地道战是在抗日战争时期,在华北平原上抗日军民利用地道打击日本侵略者的作战方式.地道网是房连房.街连街.村连村的地下工事,如下图所示. 我们在回顾前辈们艰苦卓绝的战争生活 ...

最新文章

  1. Kappa:比Lambda更好更灵活的实时处理架构
  2. TypeScript 素描 - 模块解析、声明合并
  3. GHUnit for iOS测试指南
  4. 雨中的蚊子为啥不会被雨滴砸死?
  5. SSM整合后的项目结构
  6. Git以及GithubDesktop配置ssh访问/下载/上传 详细步骤
  7. Symantec Endpoint Protection(SEP) 离线病毒库下载与升级
  8. 箱线图2种画法-直接给出各个四分位值或者数据集
  9. Android WebView 跳转第三方App
  10. openlayer4加载arcgis rest服务(遥感影像切片)
  11. oracle数据库导表操作
  12. 简单易懂读《重构》 - Speculative Generality (高估未来的可能性)
  13. 电子公文技术获得突破 方正CEB渐成标准
  14. 华为2022数字芯片笔试题
  15. 毕业设计 - 基于Java的聊天室系统设计与实现【源码+论文】
  16. element-ui中导航菜单默认激活子菜单的第一项
  17. 抄作业计算机叫,有种尴尬叫“抄作业”,答案是“B”抄成了13,抄错答案哄堂大笑...
  18. Android 第五章 TextView
  19. 云服务器端口和防火墙端口配置
  20. 无比强大!Python抓取cssmoban网站的模版并下载

热门文章

  1. 毕业设计/论文答辩演讲稿通用模板
  2. 高三计算机教学总结,2021年高三信息技术教学工作总结范文.doc
  3. Elastic Searchable snapshot功能初探 三 (frozen tier)
  4. lua之诡异的tonumber
  5. MybatisPlus学习〖三〗crud接口实现
  6. java.sql.SQLException: Incorrect Integer value:‘****‘ for column ‘id‘ at row 1 解决方案
  7. treeGrid 详细参数
  8. 【Mysql数据库 第10章】MySQL的存储函数使用
  9. Android baidu地图定位实现签到打卡功能(附源码)
  10. 软件测试 - 软件测试流程(完整版)避免当背锅侠,测试人的生存......