旅遊計劃

旅遊n個城市,但並不是每一條路線花費都是一樣的。想把所有的城市都旅遊一遍,但是花費最小。

輸入格式
第一行輸入一個整數n,表示有n個城市
接下來有一個n*n的矩形,表示每兩個城市之間的火車花費,每兩個城市之間的花費不會超過10000。

輸出格式
輸出一個整數,表示從1號城市把所有的景點旅遊一遍並且回到1號城市的最小花費。

樣例輸入
4
0 1 1 1
1 0 2 1
5 5 0 6
1 1 3 0
樣例輸出
8

#include<iostream>
using namespace std;
int mp[10][10];
int n,ans=10000;
bool vis[10];
void dfs(int a,int cnt,int sum){//a表示當前在第a個城市,cnt表示已經去了幾個城市,sum表示當前已經花費
    if(sum>ans){//如果花的多餘上一次,剪掉 
    	return;
    }
    if(cnt==n){//遞歸出口 
    	ans=min(ans,sum+mp[a][1]);//要加上返回第一個城市的路費 
    	return;
    } 
    vis[a]=true;//標記這個城市去過 
    for(int i=1;i<=n;i++){//挑一個城市去 
    	if(!vis[i]){
    		dfs(i,cnt+1,sum+mp[a][i]);
    	}
    }
    vis[a]=false;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>mp[i][j];
		}
	} 
	dfs(1,1,0);//從第一個城市出發 
	cout<<ans<<endl;
	return 0;
} 

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章