hdu 2112 HDU Today &&(dijkstra)

来源:互联网 发布:汽车香水摆件淘宝 编辑:程序博客网 时间:2024/05/16 01:38

题解:因为读入的是字符串,所以用map储存数据,然后就是dijkstra模板;

#include<string>#include<string.h>#include<iterator>#include<iostream>#include<algorithm>#include<map>using namespace std;map<string,int>mybus;#define maxn 1000000#define SIZE 160int vis[SIZE];int len[SIZE];int dis[SIZE][SIZE];void dijkstra(int x,int y,int n){  for(int i=1;i<=n;i++)  {    len[i]=dis[x][i];    vis[i]=0;  }  vis[x]=1;  len[x]=0;  int u;  for(int i=2;i<=n;i++)  {    int minx=maxn;    for(int j=1;j<=n;j++)    {      if(!vis[j]&&len[j]<minx)      {        minx=len[j];        u=j;      }    }    vis[u]=1;      for(int j=1;j<=n;j++)      {        if(!vis[j]&&len[j]>len[u]+dis[u][j])          len[j]=len[u]+dis[u][j];      }  }  if(len[y]==maxn)    cout<<"-1"<<endl;  else    cout<<len[y]<<endl;}int main(){  int n;  while(1)  {    cin>>n;    if(n==-1)      break;    mybus.clear();    char st[40],de[40];    cin>>st>>de;    int cnt=0;    if(!mybus[st])    {      cnt++;      mybus[st]=cnt;    }    if(!mybus[de])    {      cnt++;      mybus[de]=cnt;    }    for(int i=0;i<SIZE;i++)    {      for(int j=0;j<SIZE;j++)      {        dis[i][j]=maxn;      }      dis[i][i]=0;    }    char be[40],ed[40];    int l;    for(int i=1;i<=n;i++)    {      cin>>be>>ed;      if(!mybus[be])      {        cnt++;        mybus[be]=cnt;      }      if(!mybus[ed])      {        cnt++;        mybus[ed]=cnt;      }      cin>>l;      dis[mybus[be]][mybus[ed]]=dis[mybus[ed]][mybus[be]]=l;    }    if(strcmp(st,de)==0)      cout<<"0"<<endl;    else    dijkstra(mybus[st],mybus[de],mybus.size());  }  return 0;}
0 0
原创粉丝点击