给出出发点城市1,求到终点城市5的最短路径。
(这题书上说也可以用BFS实现,但我想了一晚上没做出来....)
输入输出样例
输入样例#1:
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
输出样例#1:
9
#include <stdio.h>
#define maxn 100
int ar[maxn][maxn], flag[maxn], min = 9999999;
int n, m;
void dfs(int cur, int dis)
{
if(dis > min) return; //如果当前走过的路程比之前走过的最短路还长,那就不用继续找下去了
int j;
if(cur == n) // 到达目标城市
{
if(dis < min) min = dis; //更新最小值
return;
}
for(j = 1; j <= n; j++) // dfs通用模板
{
if(ar[cur][j]!= 9999999 && flag[j] == 0)
{
flag[j] = 1;
dfs(j, dis+ar[cur][j]);
flag[j] = 0;
}
}
return;
}
int main()
{
int i, j, a, b, c, head, tail, cur, sum = 0;
scanf("%d %d", &n, &m);
for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
{
if(i == j) ar[i][j] = 0;
else ar[i][j] = 9999999;
}
}
for(i = 1; i <= m; i++)
{
scanf("%d %d %d", &a, &b, &c);
ar[a][b] = c;
}
flag[1]=1; //从城市1出发,切记一定要记录已经走过!!
dfs(1, 0);
printf("%d", min);
return 0;
}