zoukankan      html  css  js  c++  java
  • POJ 1502 MPI Maelstrom

    ..................................................................

    先无语,必须无语!!!!

    应该说是一个很简单的题:赤裸的Dijsktra!

    但是题意读不懂,用着有道+1个小时+坚强的意志=终于读懂了!。。。。。。。English。。。。。。。。。。

    然后速想代码架构,速敲代码!!但是测试数据就错了!!!!!

    最终调试!!发现定义最大值错了!!即#define MAX 0x7fffffff

    这样一来,在最大值的基础上再加上一个数就越界了,可能就是负数!以至于更新dist的值整成负的了!!!

    记住!这个错误,以后别犯了!!!

    View Code
    #include <stdio.h>
    #include <string.h>

    #define N 102
    //#define MAX 0x7fffffff 草了!这次Dijsktra写的木一点问题,这里出问题了,窝里割草啊!
    //这几把错的给力啊!
    #define MAX 0xfffffff

    int map[N][N];
    int dist[N];
    bool flag[N];

    void Dijsktra(int s,int n)
    {
    int i,j,u;
    for(i=1;i<=n;i++)
    {
    dist[i]=map[s][i];
    flag[i]=false;
    }
    flag[s]=true;

    for(i=1;i<n;i++)
    {
    for(u=s,j=1;j<=n;j++)
    {
    if(!flag[j] && dist[u]>dist[j])
    {
    u=j;
    }
    }
    flag[u]=true;
    for(j=1;j<=n;j++)
    {
    if(!flag[j] && (dist[u]+map[u][j]<dist[j]))
    {
    dist[j]=dist[u]+map[u][j];
    }
    }
    }
    }
    int solve(int s,int n)
    {
    int i,j;

    Dijsktra(s,n);
    dist[s]=0;

    for(j=i=1;i<=n;i++)
    {
    if(dist[j]<dist[i])
    {
    j=i;
    }
    }
    return dist[j];
    }

    int getInt()
    {
    int ans=0;
    char c;

    while(((c=getchar())>'9' || c<'0') && (c!='x'));
    while(c>='0' && c<='9')
    {
    ans=ans*10+c-'0';
    c=getchar();
    }

    return ans?ans:MAX;
    }

    int main()
    {
    int i,j,n;

    // freopen("input.txt","r",stdin);
    while(scanf("%d",&n)!=EOF)
    {
    for(i=0;i<=n;i++)
    {
    for(j=0;j<=n;j++)
    map[i][j]=MAX;
    }
    for(i=2;i<=n;i++)
    {
    for(j=1;j<i;j++)
    {
    map[j][i]=map[i][j]=getInt();
    }
    }

    printf("%d\n",solve(1,n));
    }
    return 0;
    }
  • 相关阅读:
    PowerDesigner导出word表结构
    Java
    Java
    Java
    Java
    Java
    Java
    Java
    Java
    Java
  • 原文地址:https://www.cnblogs.com/fornever/p/2228949.html
Copyright © 2011-2022 走看看