hdu 2112 HDU today

来源:互联网 发布:java程序员岗位职责 编辑:程序博客网 时间:2024/06/05 22:55
#include<cstdio>#include<iostream>#include<cstring>using namespace std;#define INF 0x3f3f3f3f const int N = 160;int w[N][N], d[N], m;char add[N][40];//通过这个把字符串转化为数字形式 void Init(){    for(int i = 0; i <= 150; i++)        for(int j = 0; j < 150; j++)        {            if(i == j)                w[i][j] = 0;            else                w[i][j] = INF;        }}int Change(char *s){    int i;    for(i = 0; i < m; i++)        if(strcmp(add[i], s) == 0)            return i;        strcpy(add[m], s);        m++;        return m-1;}void Dijkstra(){    int vis[N], i;    memset(vis, 0, sizeof(vis));    for(i = 0; i < m; i++)        d[i] = INF;    d[0] = 0;    for(i = 0; i < m; i++)    {        int x = 0, temp = INF;        for(int y = 0; y < m; y++)            if(!vis[y] && d[y] < temp)                temp = d[x = y];        //if(temp == INF)  break;        vis[x] = 1;        for(int y = 0; y < m; y++)            if(d[y] > d[x] + w[x][y])                d[y] = d[x] + w[x][y];    }    return ;}int main(){    int n, i, j;    while(scanf("%d",&n) && n != -1)    {        Init();        char st[40], ed[40], s1[40], s2[40];        int a, b, c;        cin>>st>>ed;        strcpy(add[0], st);        strcpy(add[1], ed);        m = 2;        for(i = 0; i < n; i++)        {            cin>>s1>>s2>>c;            a = Change(s1);            b = Change(s2);            if(w[a][b]>c)            w[a][b] = w[b][a] = c;        }        if(strcmp(st, ed) == 0)        {            cout<<"0"<<endl;            continue;        }        Dijkstra();        if(d[1] == INF)            cout<<"-1"<<endl;        else           cout<<d[1]<<endl;    }    return 0;}

0 0