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. android 实践项目三

    android 实践项目三 本周我主要完成的任务是将代码进行整合,然后实现百度地图的定位与搜索功能.在这次实现的 图形界面如下: 在本周的工作中主要的实现出来定位与收索的功能,在地图中能实现了定位,显 ...

  2. codevs 1380 没有上司的舞会 - 树形动态规划

    题目描述 Description Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.每个职员有一个快乐指数.现在有个周年庆宴会 ...

  3. 字符串分割(C++)(转载)

    转载出自:http://www.cnblogs.com/MikeZhang/archive/2012/03/24/MySplitFunCPP.html 经常碰到字符串分割的问题,这里总结下,也方便我以 ...

  4. CDC画图

    CDC* pdc: CRect rcBounds: 1. 画直线 pdc->MoveTo(rcBounds.TopLeft());//将画笔移动到左上角这个点,使用这个点作为起点画图 pdc-& ...

  5. C#学习笔记(十三):继承

    继承 object是引用类型 public:最高权限,公开的 Protected:外部不可以访问 Internal:类的默认访问是什么作用域 Private:类成员默认   基类实例:可以通过base ...

  6. 如何插入sql数据

    原:http://blog.csdn.net/Weicleer/article/details/47608289

  7. Linux内核的五大模块

    Linux内核的五大模块 (转自)https://blog.csdn.net/huangjingbin/article/details/19396235 Linux内核的五大模块 1.进程调度模块 2 ...

  8. codeforces 352 div 2 C.Recycling Bottles 贪心

    C. Recycling Bottles time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  9. pyqt 调用颜色选择器

    # -*- coding: utf- -*- from PyQt5.QtWidgets import QApplication, QPushButton, QColorDialog , QWidget ...

  10. 使用better-scroll遇到的问题

    项目中想给侧边栏添加一个滚动效果,用better-scroll帮助实现,引入better-scroll后,给外层最大盒子添加了<aside ref="asideMenu"&g ...