poj1797 (algoritmo de Dijkstra)

1. Una variante del algoritmo de Dijkstra.
2. Encuentre el peso de carga mínimo de una carretera como el peso de carga máximo, de modo que el último punto sea el peso más pequeño entre los pesos máximos que puede soportar.
Clave:

if(!vis[j]&&dis[j]<min_(map_[v][j],dis[v]))
            {
    
    
                dis[j]=min_(map_[v][j],dis[v]);
            }
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
using namespace std;
#define MAX 1005
#define INF 0x3f3f3f3f
int map_[MAX][MAX];
int dis[MAX];
int vis[MAX];
int n,m;

int min_(int a,int b)
{
    
    
	if(a>b)
		a=b;
	return a;
}
int dijkstra()
{
    
    
    int MIN=INF,MAX_,v;
    for(int i=1;i<=n;i++)
    {
    
    
        vis[i]=0;
        dis[i]=map_[1][i];

    }
    for(int i=1;i<n;i++)
    {
    
    
        MAX_=0;
        for(int j=1;j<=n;j++)
        {
    
    
            if(!vis[j]&&MAX_<dis[j])
            {
    
    
                MAX_=dis[j];
                v=j;
            }
        }
        vis[v]=1;
        for(int j=1;j<=n;j++)
        {
    
    
            if(!vis[j]&&dis[j]<min_(map_[v][j],dis[v]))
            {
    
    
                dis[j]=min_(map_[v][j],dis[v]);
            }
        }
    }
    return dis[n];
}
int main()
{
    
    
    int t,a,b,c,k=0;
    cin>>t;
    while(t--)
    {
    
    
        k++;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
        {
    
    
            for(int j=1;j<=n;j++)
            {
    
    
                    map_[i][j]=0;
            }
        }
        for(int i=1;i<=m;i++)
        {
    
    
            scanf("%d%d%d",&a,&b,&c);
            if(map_[a][b]<c)
            {
    
    
                map_[a][b]=map_[b][a]=c;
            }
        }
        printf("Scenario #%d:\n",k);
        printf("%d\n\n",dijkstra());
    }
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/mingjiweixiao/article/details/113732005
Recomendado
Clasificación