zoukankan      html  css  js  c++  java
  • Bessie Come Home 回家(最短路)

    Description

    现在是晚餐时间,而母牛们在外面分散的牧场中。 农民约翰按响了电铃,所以她们开始向谷仓走去。 你的工作是要指出哪只母牛会最先到达谷仓(在给出的测试数据中,总会有且只有一只速度最快的母牛)。 在挤奶的时候(晚餐前),每只母牛都在她自己的牧场上,一些牧场上可能没有母牛。 每个牧场由一条条道路和一个或多个牧场连接(可能包括自己)。 有时,两个牧场(可能是自我相同的)之间会有超过一条道路相连。 至少有一个牧场和谷仓之间有道路连接。 因此,所有的母牛最后都能到达谷仓,并且母牛总是走最短的路径。 当然,母牛能向着任意一方向前进,并且她们以相同的速度前进。 牧场被标记为'a'..'z'和'A'..'Y',在用大写字母表示的牧场中有一只母牛,小写字母中则没有。 谷仓的标记是'Z',注意没有母牛在谷仓中。

    Input

    第 1 行: 整数 P(1<= P<=10000),表示连接牧场(谷仓)的道路的数目。 第 2 ..P+1行: 用空格分开的两个字母和一个整数: 被道路连接牧场的标记和道路的长度(1<=长度<=1000)。

    Output

    单独的一行包含二个项目: 最先到达谷仓的母牛所在的牧场的标记,和这只母牛走过的路径的长度。

    Sample Input

    5
    A d 6
    B d 3
    C e 9
    d Z 8
    e Z 3

    Sample Output

    B 11

    AC代码:(Floyd)

    #include <stdio.h>
    #include <iostream>
    using namespace std;
    int main()
    {
        int e[100][100],k,i,j,n,m=51,t3;
        char t1,t2;
        int inf=999999;
        scanf("%d",&n);
        for(i=0; i<=m; i++)
            for(j=0; j<=m; j++)
                e[i][j]=inf;
        for(i=0; i<n; i++)
        {
            int x,y;
            cin>>t1>>t2>>t3;
            if(t1>='A'&&t1<='Z')
                x=t1-65;
            if(t2>='A'&&t2<='Z')
                y=t2-65;
            if(t1>='a'&&t1<='z')
                x=t1-97+26;
            if(t2>='a'&&t2<='z')
                y=t2-97+26;
            if(t3<e[x][y])
               e[x][y]=e[y][x]=t3;
           // cout<<x<<y<<t3<<endl;
        }
        for(k=0; k<=m; k++)
            for(i=0; i<=m; i++)
                for(j=0; j<=m; j++)
                    if(e[i][j]>e[i][k]+e[k][j] )
                        e[i][j]=e[i][k]+e[k][j];
        int xiao=101000;
        char ans;
        for(i=0; i<=24; i++)
        {
            if(e[25][i]<xiao)
            {
                 xiao=e[25][i];
                 ans=i;
            }
        }
        printf("%c %d
    ",ans+65,xiao);
        return 0;
    }
    

    此代码wrong answer(dijkstra)   why?

    #include <algorithm>
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <cmath>
    #include <queue>
    using namespace std;
    #define MAX 1e9+7
    const int mm=1010;
    int mapp[300][300];
    int dis[1000],vis[10000]={0};
    int n,m=51;
    void disj()
    {
        memset(vis,0,sizeof(vis));
        int minn=MAX,i,j;
        for(i=0; i<=m; i++)
        {
            dis[i]=mapp[25][i];
        }
        vis[25]=1;//
        dis[25]=0;//1是起点可以任意改
        int pos;
        for(i=0; i<=m; i++)
        {
            minn=MAX;
            for(j=0; j<=m; j++)
            {
                if(vis[j]==0&&minn>dis[j])
                {
                    minn=dis[j];
                    pos=j;
                }
            }
            vis[pos]=1;
            for(j=0;j<=m;j++)
            {
                if(vis[j]==0&&dis[j]>dis[pos]+mapp[pos][j])
                    dis[j]=dis[pos]+mapp[pos][j];
            }
        }
    }
    int main()
    {
        char a,b;
        int c,j,i;
        cin>>n;
        memset(mapp,MAX,sizeof(mapp));
        while(n--)
        {
            cin>>a>>b>>c;
            if(a>='A'&&a<='Z')
                a
    =a-65;
            if(b>='A'&&b<='Z')
                b=b-65;
            if(a>='a'&&a<='z')
                a=a-97+26;
            if(b>='a'&&b<='z')
                b=b-97+26;
            if(c<mapp[a][b])
            {
                mapp[a][b]=c;
                mapp[b][a]=c;
            }
        }
        disj();
        int xiao=10100,ans=0;
        for(i=0;i<25;i++)
        {
            if(dis[i]<xiao)
            {
                xiao=dis[i];
                ans=i;
            }
        }
        printf("%c %d
    ",ans+65,xiao);
        return 0;
    }
  • 相关阅读:
    用Struts2框架报错:The Struts dispatcher cannot be found
    Struts2.0笔记二
    [转]使用Struts 2防止表单重复提交
    Struts配置文件报错"元素类型为 "package" 的内容必须匹配"
    Java基础知识
    Struts笔记二:栈值的内存区域及标签和拦截器
    [转]迭代器
    Struts笔记一
    账户注册激活邮件及登入和注销
    EL表达式获取对象属性的原理
  • 原文地址:https://www.cnblogs.com/zcy19990813/p/9702691.html
Copyright © 2011-2022 走看看