深度优先搜索代码实现

问题描述:

有向图如下:
在这里插入图片描述
求节点1到节点5的最短路径?

代码

// DFS_test.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include<stdio.h>
#define MAXVEX   100 
#define MAXDATA  10000000

typedef struct
{
	int vertexs[MAXVEX];
	int edges[MAXVEX][MAXVEX];
	int numVertexs;
	int numEdges;
	int max_path;
}MGraph;

// book:顶点遍历标志位
int min=999999999,book[101];

void dfs2(MGraph & m,int cur,int dis)
{
  int j;
  // 走过的路程大于最短路径,所以可以确定当前路径不是最优的,无意义,所以返回
  if(dis>min)
  {
    return;
  }
  //判断是否到达了目标顶点
  if(cur==m.numVertexs)
  {
    if(dis<min) min = dis;
    return;
  }
  for(j=1;j<=m.numVertexs;j++)
  {
	//1.该条边有效
	//2.该顶点没有被访问过
	if(m.edges[cur][j]!=99999999&&book[j]==0)
    {
	 //e[cur][j]:到下一个顶点的路程
      book[j]=1;
      dfs2(m,j,dis+m.edges[cur][j]);
	  book[j]=0;  //注意这里!!
    }
           
  }  
  return;
}


int main()
{
  int i,j,a,b,c;
  MGraph m;
  scanf("%d %d",&m.numVertexs,&m.numEdges);
  for(i=1;i<=m.numVertexs;i++)
  {
    for(j=1;j<=m.numVertexs;j++)
    {
      if(i==j)
      {
        m.edges[i][j]=0;
      }
      else
      {
        m.edges[i][j]=MAXDATA;
      }
    }
  }
  
  for(i=1;i<=m.numEdges;i++) //边
  {
    scanf("%d %d %d",&a,&b,&c);
    m.edges[a][b] = c;
  }

  book[1]=1;
  //初始顶点为1顶点
  dfs2(m,1,0);
  printf("%d",min);
  getchar();
  return 0;
}

输入参数:
5 8
1 2 2
1 5 10
2 3 3
2 5 7
3 1 4
3 4 4
4 5 5
5 3 3

输出:
9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值