hdu 2112 HDU Today (最短路,字符处理)

题目

 

 

题目很简单,只是多了对地名转化为数字的处理,好吧,这我也是参考网上的处理办法,不过大多数的人采用map来处理

注意初始化注意范围,不然会wa!!!(这是我当时wa的原因org)

大家容易忽视的地方——双向边,起点等于终点(虽然我当时都考虑到了)

 

 

#define  _CRT_SECURE_NO_WARNINGS

#include<string.h>
#include<stdio.h>
#include<math.h>

const int MAXN=155;  

#define typec int  
const typec INF=0x3f3f3f3f;//防止后面溢出,这个不能太大  
bool vis[MAXN];  
int pre[MAXN];
typec cost[MAXN][MAXN];
typec lowcost[MAXN];
int nn;
char mark[MAXN][33];
void Dijkstra(int n,int beg)  
{  
    lowcost[beg]=0;  
    for(int j=0;j<n;j++)  
    {  
        int k=-1;  
        int Min=INF;  
        for(int i=0;i<n;i++)  
            if(!vis[i]&&lowcost[i]<Min)  
            {  
                Min=lowcost[i];  
                k=i;  
            }  
        if(k==-1)break;  
        vis[k]=true;  
        for(int i=0;i<n;i++)  
            if(!vis[i]&&lowcost[k]+cost[k][i]<lowcost[i])  
            {  
                lowcost[i]=lowcost[k]+cost[k][i];  
                pre[i]=k;  
            }  
    }  
}  

int find(char ch[])//灵感来自网上
{
    for(int i=0;i<nn;i++)
    {
        if(strcmp(mark[i],ch)==0)    //有出现过
            return i;
    }
    strcpy(mark[nn],ch);//出现新的记录一下
    nn++;
    return nn-1;
}

int main()
{
    int n,i,c,j,aa,bb,ee,ss;
    char a[33],b[33],s[33],e[33];
    while(scanf("%d",&n)!=EOF)
    {
        if(n==-1)break;
        nn=0;
        for(i=0;i<MAXN;i++)
        {
            mark[i][0]='\0';
            lowcost[i]=INF;
            vis[i]=false;pre[i]=-1; 
            for(j=0;j<MAXN;j++)
                cost[i][j]=(i==j)? 0:INF;
        }
        scanf("%s%s",s,e);
        ss=find(s);
        ee=find(e);
        for(i=0;i<n;i++)
        {
            scanf("%s%s%d",a,b,&c);
            aa=find(a);
            bb=find(b);
            if(cost[aa][bb]>c)
                cost[aa][bb]=cost[bb][aa]=c;
        }
        Dijkstra(nn,ss);
        if(lowcost[ee]>=INF)
            lowcost[ee]=-1;
        if(strcmp(s,e)==0)
            printf("0\n");
        else
        printf("%d\n",lowcost[ee]);
    }
    return 0;
}
View Code

 

posted @ 2014-02-09 16:00  laiba2004  Views(158)  Comments(0Edit  收藏  举报