HDU 3790 最短路径问题

最短路径问题

在广搜的同时多了一个最小费用统计。注意输入可能有重复边。

#include
#include
#include
#include
#define M 0xfffffff
using namespace std;
int map[1002][1002][2];
__int64 vis[1002],val[1002];
int main()
{
    int n,m;
    int i,j,k,v,l;
    int sta,end;
    while(~scanf("%d%d",&n,&m)&&n+m)
    {
        memset(map,-1,sizeof(map));
        memset(vis,-1,sizeof(vis));
        memset(val,-1,sizeof(val));
        for(i=0; il||(map[j][k][0]==l&&map[j][k][1]>v))
            {
                map[j][k][0]=l;
                map[k][j][0]=l;
                map[j][k][1]=v;
                map[k][j][1]=v;
            }
        }
        scanf("%d%d",&sta,&end);
        queueq;
        int front,rear;
        front=sta;
        vis[sta]=0;
        val[sta]=0;
        q.push(front);
        __int64 minm=M;
        __int64 valuable;
        while(!q.empty())
        {
            front=q.front();
            q.pop();
            for(i=1; i<=n; i++)
            {
                if(map[front][i][0]>0&&(vis[front]+map[front][i][0]<=vis[i]||vis[i]<0))
                {
                    q.push(i);
                    if(vis[front]+map[front][i][0]==vis[i])
                    {
                        if(val[front]+map[front][i][1]




你可能感兴趣的:(图论)