城市地圖(有向圖的遍歷)

題意:從1號城市到n號城市有許多種走法,現在給出你每兩條聯通的城市的公路里程,請你求最短1號城市到n號城市的最短路徑(注意,公路是單向的)
輸入:
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

**描述:**第一行表示有n個城市,m條公路,接下來m行類似a,b,c這樣的數據表示a城市可以到b城市,里程爲c

代碼;

#include<cstdio>
bool vis[101];
int e[101][101];
int n,m,min=9999999;
void dfs(int cnt,int sum){
	if(sum>min){
		return;
	}
	if(cnt==n){
		if(sum<min){
			min=sum;
		
		}
			return;
	}
	for(int i=1;i<=n;i++){
		if(!vis[i]&&e[cnt][i]!=0&&e[cnt][i]!=9999999){
			vis[i]=true;
			dfs(i,sum+e[cnt][i]);
			vis[i]=false;
		}
	}
	return;
}
int main(){
	int a,b,c;
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){//初始化 
			if(i==j){
				e[i][j]=0;
			}else{
				e[i][j]=9999999;
			}
		}
	} 
	for(int i=1;i<=m;i++){//單行道 
		scanf("%d %d %d",&a,&b,&c);
		e[a][b]=c;
		//e[b][a]=c;
	} 
	vis[1]=true;
	dfs(1,0);
	printf("%d\n",min);
	return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章