一直输出-1
查看原帖
一直输出-1
213465
zhurunlin68楼主2021/10/10 15:09
#include<bits/stdc++.h>
using namespace std;
int bb,num,n,k,m,s,t,a[105],c[105][105]={99999999},d[105][105],minn=99999999;
bool q[105];
void dfs(int aa)
{
	if(aa==t&&minn>bb)
	{
		minn==bb; 
		return ;
	} 
	if(bb>=minn) return ;
	for(int i=1;i<=n;i++)
	{
		if(q[a[i]]!=1&&c[aa][i]!=99999999)
		{
	    	bb+=c[aa][i];
	    	for(int j=1;j<=n;j++)
	    	   if(d[a[j]][a[i]]==1||a[j]==a[i]) q[a[j]]=1;
	        dfs(i);
	        bb-=c[aa][i];
	    	for(int j=1;j<=n;j++)
	    	   if(d[a[j]][a[i]]==1||a[j]==a[i]) q[a[j]]=0;
	    }
	}
}
int main()
{
	cin>>n>>k>>m>>s>>t;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	for(int i=1;i<=k;i++)
		for(int j=1;j<=k;j++)
		{
			int x;
			cin>>x;
			d[i][j]=x;
		}
	for(int i=1;i<=m;i++)
	{
		int x,y,z;
		cin>>x>>y>>z;
		c[x][y]=min(z,c[x][y]);
		c[y][x]=min(z,c[y][x]);
	}
	q[a[s]]=1;
	dfs(s);
	if(minn==99999999) cout<<-1<<endl;
	else cout<<minn<<endl;
	return 0;
} 
2021/10/10 15:09
加载中...