图的深度优先搜索可以解决:正边权、固定两点间的最短路径
题目描述
遍历上述图,寻找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;
}