城市地图-- 图的深度优先搜素

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int mindis = 9999999 ;
const int MAX = 1000 ;
int n ,m  ;
int book[MAX];
int map[MAX][MAX] ;
void init()
{
	int i ;
	int j ;
	for(i=1;i<=n;i++)
	{
		for(j = 1;j<=n ;j++)
		{
			if(i==j)
			map[i][j] = 0 ;
			else
			map[i][j] = mindis ;
		}
	}
	int a ,b ,c ;
	for(i=1;i<=m;i++)
	{
		cin>>a>>b>>c;
		map[a][b] = c ;

	}

	return ;

}
void dfs(int cur ,int dis)
{
	int i ;
	if(dis>mindis)
	return ;
	if(cur==n)
	{
		if(dis<mindis)
		mindis =dis ; // 更新最小路径;
		return ;
	}

	for(i=1;i<=n;i++)
	{
		if(map[cur][i]!=mindis && book[i]==0)
		{
			book[i] = 1 ;
			dfs(i,dis+map[cur][i]); // 从城市i再出发继续寻找目标;
			book[i] = 0 ; // 之前一步探索完毕后,取消对城市i 的标记

		}

	}
	return ;
}
int main()
{
	int i;
	cin>>n >>m ;
	init();
	book[1] = 1 ; // 标记1号城市已经在路径中了
	dfs(1,0);// 1 表示当前所在的城市编号,0表示当前走过的路程

	cout<<mindis<<endl;

	return 0 ;
}
/*
测试数据:
5 个城市 8 条路线
第 2 到9 行 表示 ai 到 bi 的权值为ci
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

*/


猜你喜欢

转载自blog.csdn.net/qq_41661809/article/details/80558592
今日推荐