POJ 1847 Tram 简单最短路★

读懂题意后就是一道简单的模板题。

题目大意:n个交叉点,A,B是起始点和终点,接下来输入的n行每行刚开始输入一个数字num代表和那个点相邻的点的个数,之后num个数的第一个代表可以直接到达的城市,后面num-1个要翻转一下才可以到,问你从A到B最少的翻转次数。


直接建图就好,第一个相邻的点距离是0,后面的距离是1,求最短路即为最小翻转次数,注意建图是单向的。


AC代码:

#include
#include
#include
#include
#define INF 0x3fffffff
using namespace std;
const int maxn=10010;
int first[maxn],sign;
struct node
{
    int to,w,next;
}edge[maxn*2];
void creat()
{
    for(int i=0;idis[p]+edge[k].w)
                dis[TO]=dis[p]+edge[k].w;
        }
        int mincost=INF;
        for(int i=1;i<=n;i++)
        {
            if(!vis[i]&&dis[i]

你可能感兴趣的:(图论)