图的深度优先遍历--城市地图

原创 2015年07月07日 22:50:00
//题目:第一行第一个数n表示城市个数(1~n),第二个数m表示公路个数
//接下来有m行数据表示c到d有e千米,每条公路都是单行的,求1到n的最短路径

#include <stdio.h>
int book[100];
int a[100][100];
int min=10000;
int n;

int dfs(int cur,int step);
int main()
 {

     int m,i,j,c,d,e;
     scanf("%d%d",&n,&m);
     for (i=1;i<=n;i++)
        book[i]=0;
     for (i=1;i<=n;i++)
        for (j=1;j<=n;j++)
        if (i==j) a[i][j]=0;
     else
         a[i][j]=100000;
     for (i=1;i<=m;i++)
     {
         scanf("%d%d%d",&c,&d,&e);
         a[c][d]=e;//单行的

     }
     book[1]=1;
     dfs(1,0);
     printf("%d\n",min);
 }
 int dfs(int cur,int step)
 {
     int i;
     if (step>min)
        return;//优化,如果已经超过最小步数则不需要再深搜
     if (cur==n)
     {
         if (step<min)
        min=step;//更新最小值
         return;
     }
       for (i=1;i<=n;i++)
        if ((a[cur][i]!=0)&&(a[cur][i]!=100000)&&(book[i]==0))
     {

         book[i]=1;
         dfs(i,step+a[cur][i]);
         book[i]=0;
     }
     return;
 }

//注:因为之前是访问节点,所以每个节点只能访问一次,而城市可能在另一个递归中还要访问它。

比如如图深度优先搜索顺序是1-2-3,因而当访问到3时,book[2]=1,而1-3-2却可能比1-2还要小,所以book[2]必须要为0




版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

图的遍历(深度优先遍历)

图的遍历   树的遍历我们谈了四种方式,大家回忆一下,树因为根结点只有一个,并且所有的结点都只有一个双亲,所以不是很难理解。 但是谈到图的遍历,那就复杂多了,因为它的任一顶点都可以和...

图--深度优先遍历

图的遍历概念 1、图的遍历      和树的遍历类似,图的遍历也是从某个顶点出发,沿着某条搜索路径对图中每个顶点各做一次且仅做一次访问。它是许多图的算法的基础。      深度优先遍历和广度...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

图--深度优先遍历

图的遍历概念 1、图的遍历      和树的遍历类似,图的遍历也是从某个顶点出发,沿着某条搜索路径对图中每个顶点各做一次且仅做一次访问。它是许多图的算法的基础。      深度优先遍历和广度...

图之图的深度优先遍历

图之图的深度优先遍历 。 深度优先遍历是连通图的一种遍历策略。其基本思想如下: 设x是当前被访问顶点,在对x做过访问标记后,选择一条从x出发的未检测过的边(x,y)。若发现顶点y已访问过,则...

图的遍历-广度优先和深度优先遍历

图的遍历 概念 从给定图中任意指定的顶点出发,按照某种搜索方法沿着图的边访问图中的所有顶点,使每个顶点仅被访问一次,这个过程就是图的遍历。方法有两种:深度优先遍历(DFS)和广度优先遍历(BFS)...

图的广度优先历遍和深度优先历遍

今天介绍图(森林)的深度优先历遍和广度优先历遍 1、以下算法是用java实现的,但核心的步骤跟C语言差不多,先介绍必要的数据结构 1.1、图(当取定图中某个顶点为树根时,可依次把图划分为一棵树或若...

图的深度优先遍历和广度优先遍历

这几天学习了图的存储结构,有用;邻接矩阵和邻接表法两种方式。其中两种表示方法各有相应的用途,在这里仅用邻接表法来表示图,并且讨论图的深度优先遍历和广度优先遍历,下面是代码: //ArcNode ...

图的创建 深度优先遍历 广度优先遍历

struct ArcNode { int headVex,tailVex; //头尾顶点 ArcNode *headIN,*tailOut; int weight; }; struct ...

图的深度优先遍历和广度优先遍历

图的深度优先遍历和广度优先遍历一、邻接表法建立图创建图的方法有邻接矩阵和邻接表法。 邻接矩阵把边的关系包含在一个矩阵中,虽然很方便,但是,当图中的定点数远大于边数时,浪费了很大的空间。 ...

dfs之图的遍历——城市地图

我不是很清楚这个相不相当于最短路问题。 题目: 输入第一行表示有n个城市,m条马路。 接下来m行是类似于a b c这样的数据,表示有一条路可以从城市a到b,且路程为c公里。 需要注意的是这里的...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)