恳请各位大神指出错误,只有第八个点通过了。
查看原帖
恳请各位大神指出错误,只有第八个点通过了。
828195
china178楼主2023/2/5 15:09
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
int a[105][105], s[105], vis[105], n, p, ans=INF;
void dfs(int location, int num, int sum){
	if(num==0){
		ans=min(ans, sum+a[location][n]);
		return ;
	}
	for(int i=1; i<=p; i++){
		if(!vis[s[i]] || s[i]!=location){
			dfs(s[i], num-1, sum+a[location][s[i]]);
			vis[s[i]]=0;
		}
	}
}
int main(){
	cin >> n;
	for(int i=1; i<=n; i++){
		for(int j=1; j<=n; j++)
		   cin >> a[i][j];
	}
	for(int k=1; k<=n; k++){
		for(int i=1; i<=n; i++){
			for(int j=1; j<=n; j++){
				if(i==j) continue;
				a[i][j] = min(a[i][j], a[i][k]+a[k][j]);
			}
		}
	}
	cin >> p;
	for(int i=1; i<=p; i++){
		cin >> s[i];
	}
	dfs(1, p, 0);
	cout << ans;
	return 0;
}
2023/2/5 15:09
加载中...