題意:從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;
}