HDU 2544 用优先队列写的最短路径

#include 
#include 
#include 
#include 
#include 
#define INF 0x7fffffff
using namespace std;
struct edge
{
    int s,t,len;

};
vector  v;
vector  p[110];
int dis[110];
int n,m;
void add(int s,int t,int l)
{
    v.push_back((edge)
    {
        s,t,l
    });
    v.push_back((edge)
    {
        t,s,l
    });
    int number=v.size();
    p[s].push_back(number-2);
    p[t].push_back(number-1);
}
struct node
{
    int pos;
    int l;
    friend bool operator <(node a,node b)
    {
        return a.l>b.l;
    }
};
priority_queue q;
bool vis[110];
void sho()
{
    memset(vis,0,sizeof(vis));
    dis[1]=0;
    for(int i=2; i<=n; i++)
        dis[i]=INF;
    q.push((node)
    {
        1,0
    });
    while(!q.empty())
    {
        node st=q.top();
        q.pop();
        vis[st.pos]=1;

        for(int i=0; i<(int)p[st.pos].size(); i++)
        {
            edge& kk=v[p[st.pos][i]];
            if(!vis[kk.t] && dis[kk.t]>dis[st.pos]+kk.len)
            {
                dis[kk.t]=dis[st.pos]+kk.len;
                q.push((node)
                {
                    kk.t,dis[kk.t]
                });
            }
        }
    }
}
int main()
{
    while(~scanf("%d%d",&n,&m))
    {
        if(n==0&&m==0)
            break;
        v.clear();
        for(int i=1; i<=n; i++)
            p[i].clear();
        int s,t,l;
        for(int i=0; i

你可能感兴趣的:(解题报告)