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

原创 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




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

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

因为这个图是有向图,无向图和有向图代码很像,当这个图是无向图的时候,需要把输入的改成map[a][b]=c ,map[b][a]=c这样就是无向的,当他是无向图的时候最短路程不是1-2-5而是1-3-...
  • superna666
  • superna666
  • 2016年10月26日 20:41
  • 98

5.3城市地图——图的深度优先遍历

#include #include using namespace std; int Min=99999999,book[101],n,e[101][101];//book数组用来标记 //我们这里...
  • shaguabufadai
  • shaguabufadai
  • 2017年03月14日 13:38
  • 90

啊哈算法 城市地图(图的深度优先遍历)

#include #include #define INF 100000 int map[100][100];//存图 int book[100];//标记 int stack[100];//当前...
  • ccDLlyy
  • ccDLlyy
  • 2016年10月16日 09:14
  • 517

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

图就是由一些顶点和连接这些顶点的边组成的。 例如上图就是由5个顶点(1、2、3、4、5)和5条边(1-2、1-3、1-5、2-4、3-5)组成。 我们从1号顶点开始遍历这个图,遍历就是把图的每...
  • wtyvhreal
  • wtyvhreal
  • 2015年01月30日 12:54
  • 4307

图——应用图的深度优先遍历思路求解问题

/* *Copyright (c) 2015 , 烟台大学计算机学院 *All right resvered . *文件名称: 应用图的深度优先遍历思路求解问题.cpp ...
  • zzh_569754126
  • zzh_569754126
  • 2015年11月22日 11:19
  • 1402

图深度优先遍历邻接矩阵表示

#include using namespace std; const int INF = 9999; int book[101],sum,n,e[101][101]; void dfs(in...
  • u012967763
  • u012967763
  • 2016年07月24日 11:34
  • 1466

图的深度优先遍历算法的实现

转载自http://blog.csdn.net/jnu_simba/article/details/8867687 算法:图的深度优先遍历(Depth First Sea...
  • weinierzui
  • weinierzui
  • 2014年04月15日 20:52
  • 3403

图遍历算法分析--深度优先、广度优先(1)

众所周知常用的图遍历方式有深度优先遍历和广度优先遍历两种,那么我首先来看看这两种算法的具体实现,我们用G[Max][Max]表示图的邻接矩阵。 //三个全局变量 bool Visited[Max]...
  • z568954956
  • z568954956
  • 2011年08月23日 10:26
  • 9190

图的深度优先搜索遍历(邻接表&邻接矩阵,递归&非递归)(C++)

图的深度优先搜索遍历可有递归和迭代两种方法。递归的方式比较容易,每次以当前节点的未被访问的邻接节点为新的出发点去遍历即可,编程的时候注意维护好全局的访问标记以及访问序列即可(可以以引用的方式传递)。非...
  • zhujiahui622
  • zhujiahui622
  • 2016年08月09日 14:26
  • 925

数据结构:图的遍历--深度优先、广度优先

图的遍历是指从图中的某一顶点出发,按照一定的策略访问图中的每一个顶点。当然,每个顶点有且只能被访问一次。 在图的遍历中,深度优先和广度优先是最常使用的两种遍历方式。这两种遍历方式对无向图和有向图都是适...
  • zhangxiangDavaid
  • zhangxiangDavaid
  • 2014年08月02日 11:20
  • 36111
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:图的深度优先遍历--城市地图
举报原因:
原因补充:

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