这份代码哪里出问题了?
查看原帖
这份代码哪里出问题了?
873417
Istruggle楼主2023/8/1 10:16

第 #10 #11 #12 过不去

#include<bits/stdc++.h>
using namespace std;
int n,k,m,s,t,c[105];
int k_[105][105],map_[105][105],ans=2100000,vis[105]={0};
void dfs(int x,int dis)
{
	if(ans<dis) return;
	if(x==t){
		ans=min(ans,dis);
		return;
	}
	for(int i  = 1;i<=n;i++)
	{
		if(map_[x][i]!=0&&k_[c[i]][c[x]]==0&&vis[i]==0&&x!=i){
			vis[i]=1;
			dfs(i,dis+map_[x][i]);
			vis[i]=0;
		}
	}
}
int main()
{
	cin>>n>>k>>m>>s>>t;
	for(int i = 1;i<=n;i++)
	scanf("%d",&c[i]);
	memset(map_,0,sizeof(map_));
	for(int i = 1;i<=k;i++)
	for(int j = 1;j<=k;j++)
	cin>>k_[i][j];
	for(int i  = 1;i<=m;i++)
	{
		int a,b,w;
		scanf("%d%d%d",&a,&b,&w);
		if(map_[a][b]!=0)
		map_[a][b]=map_[b][a]=min(map_[a][b],w);
		else
		map_[a][b]=map_[b][a]=w;
	}
	dfs(s,0);
	if(ans!=2100000)
	cout<<ans;
	else
	cout<<"-1";
	return 0; 
}
2023/8/1 10:16
加载中...