[最短路径] HDU 1869 - 六度分离

来源:互联网 发布:建模数据挖掘师 编辑:程序博客网 时间:2024/05/19 02:24

跑N遍Dijkstra即可,时间复杂度大概是O(N3)的样子。

#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>#include <algorithm>#include <iostream>#include <set>#include <map>#include <queue>#include <stack>#include <assert.h>#include <time.h>typedef long long LL;const int INF = 500000001;const double EPS = 1e-9;const double PI = acos(-1.0);using namespace std;int N, M;int graph[101][101], vis[101], dis[101][101];void init(){    for(int i = 0; i < N; i++)    {        for(int j = 0; j < N; j++)        {            if(i == j) graph[i][j] = 0;            else graph[i][j] = INF;        }    }}void Dijkstra(int s){    for(int i = 0; i < N; i++)    {        dis[s][i] = graph[s][i];    }    for(int i = 1; i < N; i++)    {        int k = -1;        int minn = INF;        for(int j = 0; j < N; j++)        {            if(vis[j] == -1 && minn > dis[s][j])            {                minn = dis[s][j];                k = j;            }        }        if(k == -1)        {            break;        }        vis[k] = 1;        for(int j = 0; j < N; j++)        {            if(vis[j] == -1 && dis[s][j] > dis[s][k] + graph[k][j])            {                dis[s][j] = dis[s][k] + graph[k][j];            }        }    }}int main(){    #ifdef _1Test        freopen("test0.in", "r", stdin);        freopen("test0.out", "w", stdout);        srand(time(NULL));    #endif    while(~scanf("%d %d", &N, &M))    {        init();        int u, v;        for(int i = 0; i < M; i++)        {            scanf("%d %d", &u, &v);            graph[u][v] = graph[v][u] = 1;        }        for(int i = 0; i < N; i++)        {            memset(vis, -1, sizeof(vis));            vis[i] = 1;            Dijkstra(i);        }        int flag = 1;        for(int i = 0; i < N; i++)        {            for(int j = 0; j < N; j++)            {                if(dis[i][j] > 7)                {                    flag = 0;                    break;                }            }            if(!flag)            {                break;            }        }        if(flag) puts("Yes");        else puts("No");    }    return 0;}


0 0
原创粉丝点击