1 条题解

  • 0
    @ 2025-11-30 16:28:07

    C++ :

    #include<iostream>
    using namespace std;
    
    int s[2501];
    int f[2501][2501];
    bool F[2501];
    int n,m;
    int a,b;
    int x,y,c,k;
    int maxint=0x7fffffff,minl;
    
    void init();
    void work();
    int main()
    {
    	init();
    	work();
    	return 0;
    }
    
    void init()
    {
    	cin>>n>>m>>a>>b;
    	for(int i=1;i<=n;++i)
    	{
    		for(int j=1;j<=n;++j)
    		{
    			f[i][j]=maxint;
    		}
    		s[i]=maxint;
    		F[i]=true;
    	}
    	for(int i=1;i<=m;++i)
    	{
    		cin>>x>>y>>c;
    		f[x][y]=f[y][x]=c;
    	}
    	return;
    }
    
    void work()
    {
    	for(int i=1;i<=n;++i)
    	{
    		s[i]=f[a][i];
    	}
    	s[a]=0;
    	F[a]=false;
    	for(int i=1;i<n;++i)
    	{
    		minl=maxint;
    		k=0;
    		for(int j=1;j<=n;++j)
    		{
    			if(F[j]&&s[j]<minl)
    			{
    				minl=s[j];
    				k=j;
    			}
    		}
    		if(!k)
    		{
    			break;
    		}
    		F[k]=false;
    		for(int j=1;j<=n;++j)
    		{
    			if(s[k]+f[k][j]<s[j]&&s[k]!=maxint&&f[k][j]!=maxint)
    			{
    				s[j]=s[k]+f[k][j];
    			}
    		}
    	}
    	cout<<s[b];
    	return;
    }
    
    • 1

    信息

    ID
    1453
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者