1087 All Roads Lead to Rome(最短路求最大权值,最短路路径条数,节点个数,回溯路径)

(这题基本上把最短路能求的都求了个遍,除了麻烦一点,难度其实还好) 

(卡题原因:dijks漏了对路径条数的初始化。)

#include
using namespace std;
#define int long long
int n,k;
string st,ed;
mapmp;
mapname;
mapw;
int e[210][210];
int indx=0;
int getID(string s){
    if(mp.count(s)){
        return mp[s];
    }
    name[indx]=s;
    mp[s]=indx++;
    return mp[s];
}
int dist[210];
int hap[210],num[210];
int sum[210];
int p[210];
bool vis[210];
void dijks(int u){
    memset(dist,0x3f,sizeof dist);
    memset(vis,0,sizeof vis);
    memset(p,-1,sizeof p);
    dist[u]=0;
    sum[u]=1;//记得每个都要初始化,漏了这个,结果debug半多小时
    for(int i=0;idist[j])
            {
                u=j;mi=dist[j];
            }
        }
        if(u==-1)break;
        vis[u]=1;
        for(int j=0;jnum[u]+1){
                            p[j]=u;
                            num[j]=num[u]+1;
                        }
                    }else if(hap[j]dist[u]+e[u][j]){
                    sum[j]=sum[u];
                    p[j]=u;
                    dist[j]=dist[u]+e[u][j];
                    hap[j]=hap[u]+w[j];
                    num[j]=num[u]+1;
                }
            }
        }
    }
    u=getID(ed);
    cout<";
    cout<>n>>k>>st;
    memset(e,0x3f,sizeof e);
    ed="ROM";
    getID(st);
    getID(ed);
    for(int i=0;i>city;
        int d;cin>>d;
        w[getID(city)]=d;
        // cout<>c1>>c2;
        int a,b,d;
        cin>>d;
        a=getID(c1);
        b=getID(c2);
        e[a][b]=e[b][a]=d;
    }
    dijks(getID(st));
    dfs(getID(ed));
}

你可能感兴趣的:(深度优先,图论,算法)