一、图的深度优先搜索

图的深度优先搜索可以解决:正边权、固定两点间的最短路径
在这里插入图片描述

题目描述

遍历上述图,寻找1->5最短路径

Input
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

a b c:表示从城市a到城市b之间距离为c(权重)

代码如下

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define SIZE 101

int e[SIZE][SIZE],book[SIZE],n,m,min = INT_MAX;

void dfs(int cur, int dis)
{
    if(dis > min)
        return;
    if(cur == n)
    {
        if(dis < min)
            min = dis;
        return;
    }
    for(int i = 1;i <= n;i++)
    {
        if(e[cur][i] != INT_MAX && !book[i])
        {
            book[i] = 1;
            dfs(i, dis+e[cur][i]);
            book[i] = 0;
        }
    }
}

int main()
{
    int i,j,a,b,c;
    scanf("%d %d",&n,&m);
    //初始化邻接矩阵
    for(i = 1;i <= n;i++)
    {
        for(j = 1;j <= n;j++)
        {
            if(i == j)
                e[i][j] = 0;
            else
                e[i][j] = INT_MAX;
        }
    }
    //录入边
    for(i = 0;i < m;i++)
    {
        scanf("%d %d %d",&a,&b,&c);
        e[a][b] = c;
    }
    book[1] = 1;
    dfs(1,0);
    printf("%d\n",min);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43327091/article/details/88020337
今日推荐