• hdu3790


    http://acm.hdu.edu.cn/showproblem.php?pid=3790

    View Code
    #include<iostream>
    #define M 1001
    #define Max 0x7fffffff
    using namespace std;

    int n,m;
    int a,b,d,p;
    int s,t;
    int map[M][M];
    int cost[M][M];
    int de[M];
    int co[M];
    int visit[M];
    int len;
    int _min;

    void Init()
    {
    int i,j;
    for(i=0;i<=n;i++)
    {
    for(j=0;j<=n;j++)
    {
    map[i][j]
    =Max;
    cost[i][j]
    =Max;
    }
    }
    }

    void DJ()
    {
    int i,j,p,k;

    memset(visit ,
    0, sizeof(visit));
    for(i=1;i<=n;i++)
    de[i]
    =co[i]=Max;

    de[s]
    =0;
    co[s]
    =0;

    for(i=1;i<=n;i++)
    {
    _min
    =Max; k=0;

    for(j=1;j<=n;j++)
    {
    if(!visit[j] && de[j] < _min)
    {
    _min
    =de[j];
    k
    =j;
    }
    }
    if(_min==Max) break;
    visit[k]
    =1;
    for( p=1; p<=n; p++ )
    {
    if(!visit[p] && map[k][p]!=Max)
    {
    if(de[p] > de[k] + map[k][p])
    {
    de[p]
    =de[k]+map[k][p];
    co[p]
    =co[k]+cost[k][p];
    }
    else if( de[p] == de[k] + map[k][p] && co[p] > co[k] + cost[k][p] )
    {
    co[p]
    = co[k] + cost[k][p];
    }
    }
    }
    }
    }


    int main()
    {
    while( cin>>n>>m, n+m )
    {
    Init();
    int i;
    for(i=0;i<m;i++)
    {
    cin
    >>a>>b>>d>>p;

    if( map[a][b] > d)
    {
    map[a][b]
    =map[b][a]=d;
    cost[a][b]
    =cost[b][a]=p;
    }
    }
    cin
    >>s>>t;
    DJ();
    cout
    <<de[t]<<" "<<co[t]<<endl;
    }
    return 0;
    }

    wrong answer的代码:帮我看看错哪儿了?哎,有什么特殊例子啊

    View Code
    #include<iostream>
    #define M 1001
    #define Max 0x7fffffff
    using namespace std;

    int n,m;
    int a,b,d,p;
    int s,t;
    int map[M][M];
    int cost[M][M];
    int visit[M];
    int _min;

    void Init()
    {
    int i,j;
    for(i=0;i<=n;i++)
    {
    for(j=0;j<=n;j++)
    {
    map[i][j]
    =Max;
    cost[i][j]
    =Max;
    }
    }
    }

    void DJ()
    {
    int i,j,p,k;

    for(i=1;i<=n;i++)
    {
    _min
    =Max; k=0;

    for(j=1;j<=n;j++)
    {
    if(!visit[j] && map[0][j]< _min)
    {
    _min
    =map[0][j];
    k
    =j;
    }
    }
    if(_min==Max) break;

    visit[k]
    =1;
    for( p=1; p<=n; p++ )
    {
    if(!visit[p] && map[k][p]!=Max)
    {
    if(map[0][p] > map[0][k] + map[k][p])
    {
    map[
    0][p]=map[0][k]+map[k][p];
    cost[
    0][p]=cost[0][k]+cost[k][p];
    }
    else if( map[0][p] = map[0][k] + map[k][p] && cost[0][p]>cost[0][k]+cost[k][p] )
    {
    cost[
    0][p]=cost[0][k]+cost[k][p];
    }
    }
    }
    }
    }


    int main()
    {
    while( cin>>n>>m, n+m )
    {
    Init();
    int i;
    for(i=0;i<m;i++)
    {
    cin
    >>a>>b>>d>>p;

    if( map[a][b] >d)
    {
    map[a][b]
    =map[b][a]=d;
    cost[a][b]
    =cost[b][a]=p;
    }
    }
    cin
    >>s>>t;
    map[
    0][s]=0;
    cost[
    0][s]=0;
    memset(visit ,
    0, sizeof(visit));
    DJ();
    cout
    <<map[0][t]<<" "<<cost[0][t]<<endl;
    }
    return 0;
    }
  • 相关阅读:
    python类库31[正则表达式匹配实例]
    Mysql百万级数据迁移实战笔记
    面试官:一千万数据,怎么快速查询?
    为什么MySQL不建议使用NULL作为列默认值?
    Redis各个数据类型最大存储量
    Rabbitmq延迟队列实现定时任务
    PHPstorm批量修改文件换行符CRLF为LF
    使用SeasLog打造高性能日志系统
    协程编程注意事项
    Rabbitmq 安装过程中常见问题(亲测可行)
  • 原文地址:https://www.cnblogs.com/FCWORLD/p/2045805.html
Copyright © 2020-2023  润新知