POJ 无限循环CE中。感觉是读题难。然后就可以建图上模板了。

附个人代码:

#include<stdio.h>
#include<string.h>
#include<iostream>
#define maxn 0x1f1f1f1f
#define size 210
using namespace std;

int low[size];
bool used[size];
int map[size][size];
int n, a, b;

void init()
{
    for (int i=0; i<=n; ++i)
    {
        for (int j=0; j<=n; ++j)
        map[i][j] = maxn;
    }
    memset(used, 0, sizeof(used));
}

void dijkstra(int aa)
{
    int i, j, k;
    for (i=0; i<n; ++i)
    low[i] = map[aa][i];
    low[aa] = 0;
    used[aa] = true;
    for (i=0; i<n; ++i)
    {
        int min = maxn;
        int temp;
        for (j=0; j<n; ++j)
        {
            if (used[j] == 0 && low[j] < min)
            {
                min = low[j];
                temp = j;
            }
        }
        if (min == maxn) break;
        used[j] = 1;
        for (j=0; j<n; ++j)
        {
            if (used[j] == 0 && low[j] > low[temp] + map[temp][j])
            {
                low[j] = low[temp] + map[temp][j];
            }
        }
    }
}

int main()
{
    while(~scanf("%d%d%d", &n, &a, &b))
    {
        init();
        a--;
        b--;
        for (int i=0; i<n; ++i)  //第i个节点的信息
        {
            int t, tt;
            scanf("%d", &t);  //有t个节点直接相连
            for (int j=0; j<t; ++j)  // 输入t个节点
            {
                scanf("%d", &tt);
                tt--;
                if (j == 0)  //第一个为默认方向
                {
                    //map[tt][i] = 0;
                    map[i][tt] = 0;
                }
                else
                {
                    //map[tt][i] = 1;
                    map[i][tt] = 1;
                }
            }
        }
        dijkstra(a);
        printf("%d\n", (low[b] == maxn) ? -1 : low[b]);
    }
    return 0;
}
附标准代码:

#include<iostream>
#include<cstdio>
  #include<cstring>
  using namespace std;
  #define N 105
  #define max 0xfffffff
  int f[N],mark[N],p[N][N];
  int n,a,b;
  void Dijkstra()
 {
     int i,j,k,min;
     memset(mark,0,sizeof(mark));
     for(i=1;i<=n;i++)
         f[i]=p[a][i];
     f[a]=0;
     mark[a]=1;
     for(i=1;i<=n;i++)
     {
         min=max;
         for(j=1;j<=n;j++)
         {
             if(!mark[j]&&f[j]<min)
             {
                 min=f[j];
                 k=j;
             }
         }
         if(min==max) break;
         mark[k]=1;
         for(j=1;j<=n;j++)
         {
             if(!mark[j]&&f[k]+p[k][j]<f[j])
                 f[j]=f[k]+p[k][j];
         }
     }
     if(f[b]==max)   printf("-1\n");
     else
         printf("%d\n",f[b]);
 }
 int main()
 {
     int i,j;
     while(scanf("%d%d%d",&n,&a,&b)!=EOF)
     {
         int c;
         for(i=1;i<=n;i++)
             for(j=1;j<=n;j++)
                 p[i][j]=max;
         for(i=1;i<=n;i++)
         {
             scanf("%d",&c);
             if(c==0)  continue;//第一次的时候忘了考虑c的取值,所以Time Limit Exceeded了一次
             int d;
             scanf("%d",&d);
             p[i][d]=0;
             c-=1;
             while(c--)
             {
                 scanf("%d",&d);
                 p[i][d]=1;
             }
         }
         Dijkstra();
     }
     return 0;
 }

POJ 1847 dijstra算法的更多相关文章

  1. POJ 1847 Floyd_wshall算法

    前面用dijstra写过了.但是捏.数据很小.也可以用Floyd来写. 注意题目里给出的是有向的权值. 附代码:#include<stdio.h>#include<string.h& ...

  2. poj 1847 最短路简单题,dijkstra

    1.poj  1847  Tram   最短路 2.总结:用dijkstra做的,算出a到其它各个点要改向的次数.其它应该也可以. 题意: 有点难懂.n个结点,每个点可通向ki个相邻点,默认指向第一个 ...

  3. POJ 1847 Tram (最短路径)

    POJ 1847 Tram (最短路径) Description Tram network in Zagreb consists of a number of intersections and ra ...

  4. dijstra算法,求源点到各个顶点的最短距离

    1:dijstra算法常用语求最短距离, dijstra每次从未发现节点n[]中,发现距离源点最短的节点m,求出最短节点后,将m添加到已发现节点y[]中,用该节点m进行更新其它未发现节点n[]-m的最 ...

  5. Dijstra算法-------为了纪念,等以后看的时候方便

    杭电problem2066 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total ...

  6. 单源最短路Dijstra算法

    Dijstra算法是寻找从某一顶点i出发到大其他顶点的最短路径.Distra算法的思想与Prim算法很像,它收录顶点的规则是按照路径长度递增的顺序收录的.设v0是源顶点,我们要寻找从v0出发到其他任意 ...

  7. 最短路 || POJ 1847 Tram

    POJ 1847 最短路 每个点都有初始指向,问从起点到终点最少要改变多少次点的指向 *初始指向的那条边长度为0,其他的长度为1,表示要改变一次指向,然后最短路 =========高亮!!!===== ...

  8. poj 1847( floyd && spfa )

    http://poj.org/problem?id=1847 一个水题,用来熟悉熟悉spfa和floyd的. 题意:有m条的铁路,要从x,到y, 之后分别就是条铁路与其他铁路的交点.第一个输入的为有n ...

  9. poj 2195 KM算法

    题目链接:http://poj.org/problem?id=2195 KM算法模板~ 代码如下: #include "stdio.h" #include "string ...

随机推荐

  1. 使用libcurl开源库和Duilib做的下载文件并显示进度条的小工具

    转载:http://blog.csdn.net/mfcing/article/details/43603525 转载:http://blog.csdn.net/infoworld/article/de ...

  2. Python数据分析入门之pandas基础总结

    Pandas--"大熊猫"基础 Series Series: pandas的长枪(数据表中的一列或一行,观测向量,一维数组...) Series1 = pd.Series(np.r ...

  3. POJ3436 ACM Computer Factory(最大流/Dinic)题解

    ACM Computer Factory Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8944   Accepted: 3 ...

  4. Source not found :Edit Source Lookup Path 解决方案

    作者原创,转载请注明转载地址 在eclipse中用debug调试的时候,出现了以下问题,很是尴尬,经常碰到,所以有必要进行总结一下: 对该问题有两种解决方案, 一种比较文明:解决方法可参考如下网址: ...

  5. Pytorch版本yolov3源码阅读

    目录 Pytorch版本yolov3源码阅读 1. 阅读test.py 1.1 参数解读 1.2 data文件解析 1.3 cfg文件解析 1.4 根据cfg文件创建模块 1.5 YOLOLayer ...

  6. 【Cuda编程】加法归约

    目录 cuda编程并行归约 AtomicAdd调用出错 gpu cpu下时间计算 加法的归约 矩阵乘法 矩阵转置 统计数目 平方和求和 分块处理 线程相邻 多block计算 cuda编程并行归约 At ...

  7. 《算法竞赛入门经典》习题及反思 -<2>

    数组 Master-Mind Hints,Uva 340 题目:给定答案序列和用户猜的序列,统计有多少数字对应正确(A),有多少数字在两个序列都出现过但位置不对. 输入包括多组数据.每组输入第一行为序 ...

  8. php五大运行模式CGI,FAST-CGI,CLI,ISAPI,APACHE模式

    做 php 开发的应该都知道 php 运行模式概念吧,本文将要和大家分享的是关于php目前比较常见的五大运行模式:包括cgi .fast-cgi.cli.isapi.apache模块的DLL ,下面作 ...

  9. python 加密与解密

    加密算法分类 对称加密算法: 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥 发送方和接收方需要持有同一把密钥,发送消息和接收消息均使用该密钥. 相对于非对称加密,对称加密具有 ...

  10. WZY社区

    WZY社区是我自己做的一个网站,后面会详细更新,敬请关注!