链接:https://blog.csdn.net/hackersuye/article/details/79044555这里详细介绍了DFS遍历的过程,我主要是介绍实现

以下是例子,所有图的DFS遍历,只需要修改createGraphics()函数即可,即生成自己的map(邻接矩阵),就可以找到两个点之间所有的路径。

1.问题如下:

输入一个矩阵的行数r(5-10)与列数c(5-10),生成一个无向图,该图每行有c个顶点每列有r个顶点,相邻顶点间有边连接,边的权值均为1,对该图的顶点进行编号,分别为1,2,...,r*c,用DFS找到某两个点之间的所有路径。

及类似如下的图:(只是简单的改变行和列)

2.代码如下

#include<stdio.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>int map[100][100];
int row, column;int i, j;
int pathOrder = 0;  //记录到当前找到的路径个数
int startPoint, endPoint;
int path[100], visited[100] = { 0 };
int pathNumber = 0;//
//初始化连接矩阵
//
void createGraphics()
{int tmp[4][2] = { {0,1},{1,0},{-1,0},{0,-1} };memset(map, 0, sizeof(map));for (i = 0; i < row*column; i++){//找到该点上下左右4个点初始map int r = i / column;int c = i % column;for (j = 0; j < 4; j++){//(r,c)相邻的点为(r1,c1) int r1 = r + tmp[j][0];int c1 = c + tmp[j][1];if (r1 >= 0 && r1 < row&&c1 >= 0 && c1 < column){map[i][r1*column + c1] = 1;}}}
}//
//返回第n个节点相连接序号最小的节点
//
int first(int n)
{for (i = 0; i < row*column; i++){if (map[n][i] == 1)return i;}printf("起点为故障点,请输入一个不为故障点的起点\n");return 0;
}//
//返回第n个节点相邻的点的个数
//
int sumCount(int n)
{int count = 0;for (i = 0; i < row*column; i++){if (map[n][i] == 1)count++;}return count;
}//
//返回第n个节点相连的比now节点序号大的节点,
//
int next(int n, int now)
{for (i = now + 1; i < row*column; i++){if (map[n][i] == 1)return i;}return 1000;  //当找不到节点n的下一个节点,返回1000
}//
//DFS寻找所有路径
//count为从起点到当前节点经过的节点数,pathNumber为寻找到的路径条数
void DFS(int nowPoint, int count)
{visited[nowPoint] = 1;path[count++] = nowPoint;if (nowPoint == endPoint && (count) >= 1){pathNumber++;printf("这两个城市间第%d条简单路径为: ", pathNumber);for (i = 0; i < (count)-1; i++){printf("%d-->", path[i] + 1);}printf("%d\n", path[(count)-1] + 1);}else{int k;for (k = first(nowPoint); k < row*column; k = next(nowPoint, k)){if (visited[k] == 0)DFS(k, count);}}visited[nowPoint] = 0;  //算法关键,回溯,将访问过状态变为未访问状态 (count)--;return;
}int main()
{int count = 0, pathNumber = 0;printf("请输入要生成图的行和列:");scanf("%d%d", &row, &column);createGraphics();printf("请输入要找到路径的起点和终点:");scanf("%d%d", &startPoint, &endPoint);startPoint--;endPoint--;DFS(startPoint, count);system("pause");return 0;
}

3、结果如下:

C语言用DFS实现找到图的所有路径(邻接矩阵实现)相关推荐

  1. Last Theorem CodeForces - 1325F(dfs树找最大环+思维)

    It's the year 5555. You have a graph, and you want to find a long cycle and a huge independent set, ...

  2. CodeForces - 1364D Ehabs Last Corollary(dfs树找最小环)

    题目链接:点击查看 题目大意:给出一个由 n 个结点和 m 条边构成的无向图,再给出一个 k ,需要在图中完成下面任意一种操作: 找到一个大小恰好为  的独立集 找到一个大小不超过 k 的环 题目分析 ...

  3. 加域时提示找不到网络路径

    加域时提示找不到网络路径: 1.暂时关闭防火墙 2.ping同DC 3.能否解析域名nslookup,客户机DNS首选项为DC地址 net stop dns && net stop n ...

  4. 生产路由跳转报错找不到js路径问题

    问题描述:点击路由跳转报错 解决方案:问题原因是点击路由找不到js路径,修改打包配置为绝对路径,部署到tomcat根目录 转载于:https://www.cnblogs.com/lcosima/p/9 ...

  5. web服务器获取项目路径问题,读取web项目properties文件路径 解决tomcat服务器找不到properties路径问题...

    1.需求:有时候我们产品经理给我们的需求是会不断变化的,例如数量是1000现在变成500,我们不可以去改代码吧,这样很麻烦,所以就可以改配置文件properties(这个数据库链接一样),当然也有js ...

  6. win7访问linux共享路径不存在,win7系统访问网络共享找不到网络路径如何解决

    近日有win7系统用户要访问网络共享文件夹的时候,却遇到了提示找不到网络路径的情况,该怎么办呢,经过分析可能是防火墙没有关闭引起的,下面随小编一起来看看win7系统访问网络共享找不到网络路径的解决方法 ...

  7. TortoiseSVN Launch Failed Error:系统找不到指定路径

    右键操作TortoiseSVN 各种报 Launch Failed Error:系统找不到指定路径 刚刚安装完成后出现的问题 解决方案:重启电脑

  8. php fopen 找不着文件,fopen 系统找不到指定路径 PHP文件包含详细讲述(4)

    test.txt 代码 结果截断失败,改下代码: $webpath = dirname(__FILE__)."/"; $filepath = "test.txt" ...

  9. mysql properties文件路径_读取web项目properties文件路径 解决tomcat服务器找不到properties路径问题...

    1.需求:有时候我们产品经理给我们的需求是会不断变化的,例如数量是1000现在变成500,我们不可以去改代码吧,这样很麻烦,所以就可以改配置文件properties(这个数据库链接一样),当然也有js ...

最新文章

  1. java.lang.IllegalArgumentException: column ‘_id‘ does not exist
  2. 用Piranha来实现WEB的负载均衡
  3. Go get 下载的包在哪里?
  4. java 全排列非递归算法_全排列的非递归算法 - osc_ivkc73ze的个人空间 - OSCHINA - 中文开源技术交流社区...
  5. 一个弹窗口的流氓软件
  6. 启明云端分享| 手把手教你基于DEMO源码快速进行86盒应用开发
  7. Windows 下配置Apache+MySql+PHP环境(原创)
  8. windows2000 ,windowsXP和windows2003共享页面文件
  9. oracle date 截取年月,在Oracle中,可用于提取日期时间类型特定部分(如年、月、日、时、分、秒)的函数有那些...
  10. Hibernate笔记7--JPA CRUD
  11. WINX的消息分派机制(续)
  12. Nginx源码包软件安装步骤
  13. SQL SERVER2005安装
  14. IDC 监控技术介绍
  15. 删除本地.svn文件
  16. CommandNotFoundError: Your shell has not been properly configured to use ‘conda deactivate‘.
  17. TFT-LCD显示屏工作原理图文解析
  18. 操作系统-复习-考题预测及解析-期中考试
  19. 随机数Math.random()公式
  20. Electron对接语音唤醒Windows SDK

热门文章

  1. java.lang.OutOfMemoryError处理错误
  2. Apache Rewrite的主要功能
  3. How I can Built A-Z index site map in my website
  4. 新病毒仿熊猫烧香 利用 Vista系统漏洞疯狂传播
  5. 从Internet上抓取指定URL的源码的方案
  6. little kernel中如何决定app目录下应该包含哪个app
  7. javascript中关于作用域和闭包
  8. 物联网 数据驱动企业 如何应对数据洪流
  9. Linux之时钟中断
  10. ***PHP 遍历数组的方法foreach