1. 程式人生 > >HDU1869 六度分離(Dijkstra演算法)

HDU1869 六度分離(Dijkstra演算法)

本題為Dijkstra演算法的簡單變形,根據模板便可寫出本題的AC程式碼,希望大家可以領悟到模板的重要性
下面是本渣渣的AC程式碼。

#include<cstdio>
#include<cstring>
#include<iostream>
#define inf 0x3fffffff
#define N 205
using namespace std;

int e[N][N],n,m,book[N],dis[N];

int Dijkstra(int s)
{
    int i,j,u,min;
    memset(book,0,sizeof(book));
    for
(i=0;i<n;i++) { dis[i]=inf; } dis[s]=0; for(i=1;i<=n;i++) { u=-1; min=inf; for(j=0;j<n;j++) { if(min>dis[j]&&book[j]==0) { u=j; min=dis[j]; } } if
(u==-1||dis[u]>7)break; book[u]=1; for(j=0;j<n;j++) { if(book[j]==0&&dis[j]>dis[u]+e[u][j]) { dis[j]=dis[u]+e[u][j]; } } } if(i<=n) { return 0; } else return 1; } int main() { while
(scanf("%d%d",&n,&m)!=-1) { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { e[i][j]=inf; } } int x,y; for(int i=0;i<m;i++) { scanf("%d %d",&x,&y); if(x!=y) { e[x][y]=e[y][x]=1; } } int flag=0; for(int i=0;i<n;i++) { if(Dijkstra(i)==0) break; flag++; } if(flag<n) cout<<"No"<<endl; else cout<<"Yes"<<endl; } return 0; }

相關推薦

HDU1869 分離Dijkstra演算法

本題為Dijkstra演算法的簡單變形,根據模板便可寫出本題的AC程式碼,希望大家可以領悟到模板的重要性 下面是本渣渣的AC程式碼。 #include<cstdio> #includ

分離弗洛伊德演算法

六度分離Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 29   Accepted Submission(s) : 10

分離最短路徑之Floyd演算法

六度分離點我找原題Time Limit : 5000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 31   Accepted Submission(s) : 14Font: Times

分離 無向圖最短路徑問題

1967年,美國著名的社會學家斯坦利·米爾格蘭姆提出了一個名為“小世界現象(small world phenomenon)”的著名假說,大意是說,任何2個素不相識的人中間最多隻隔著6個人,即只用6個人就可以將他們聯絡在一起,因此他的理論也被稱為“六度分離”理論(six degrees of sepa

分離floyd

六度分離 1967年,美國著名的社會學家斯坦利·米爾格蘭姆提出了一個名為“小世界現象(small world phenomenon)”的著名假說,大意是說,任何2個素不相識的人中間最多隻隔著6個人,即只用6個人就可以將他們聯絡在一起,因此他的理論也被稱為“六度分離”理論(six degr

PAT——A1030 Travel Plandijkstra演算法

題目連結: #include<iostream> #include<set> #include<string> #include<cmath> #include<cstring> #include<algorithm> #i

HDU——3790 最短路徑問題dijkstra演算法

題目連結: #include<stdio.h> #include<string.h> #include<stdlib.h> #define maxn 1010 #define inf 0x3fffffff using namespace std; int co

PAT 習題bitset 06-圖3 空間 30 分

包括 沒有 stream con 長度 text 翻轉 大量 集合 1 #include<iostream> 2 #include<string> 3 #include<bitset> 4 5 6 using names

7-9 旅遊規劃 25 分Dijkstra演算法

題意:   思路:單源最短路問題,Dijkstra演算法搞定就可以了,因為要找出最便宜的最短路,所以需要在更新最短距離的時候加一個條件(即當最短距離相等的時候,如果該路徑的花費更小,就更新最小花費)就可以了。之前自己學的最短路的水平也就僅限於模板題的水平,現在可以在條件

7-11 社交網路圖中結點的“重要性”計算 30 分Dijkstra演算法

題意:  思路:對每個輸入的點跑一遍dijkstra演算法,然後對這個點到所有點的距離求和按公式輸出就可以了。 (這次嘗試了用陣列模擬連結串列來做最短路問題,重新整理了自己對最短路的理解) 這裡構造連結串列的過程我的理解一直有誤差,第一行的式子中參與程式碼構建的

最短路徑問題dijkstra演算法

11 0 11 27  11 12 29 26 42 22 36 34 11 0 18  3   4 19 16 32 13 28 25 27 18 0  18 16 9   6 17 15 11 13 11 3  18  0 3 19 16 32 15 27 25 12 4

7-7 空間 30 分

“六度空間”理論又稱作“六度分隔(Six Degrees of Separation)”理論。這個理論可以通俗地闡述為:“你和任何一個陌生人之間所間隔的人不會超過六個,也就是說,最多通過五個人你就能夠認識任何一個陌生人。”如圖1所示。 圖1 六度空間示意圖 “

離散複習資料之一Dijkstra演算法

Dijkstra演算法。    Dijkstra演算法,也可以叫做標記法。它的原理是把所求目標點到達該點的最短路徑標記起來,並且把每一個到達他的最短路徑的點標記起來。就像(5,4),就是表示到達它的最短的距離是5.它是通過4到達的,類似於遞迴的思想。 先來看一個最短路問題

圖結構練習——最短路徑Dijkstra演算法

think: 1注意重複邊的覆蓋 2注意map陣列的初始化 3注意dist陣列的初始化 圖結構練習——最短路徑 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 給定一個

貪心演算法之用優先佇列解決最短路徑問題Dijkstra演算法

#include <iostream> #include <cstdio> #include <stack> #include <cstring> #include <queue> #include <cstdlib> using na

7-7 空間 30 分(bfs)c++簡短高效解決

“六度空間”理論又稱作“六度分隔(Six Degrees of Separation)”理論。這個理論可以通俗地闡述為:“你和任何一個陌生人之間所間隔的人不會超過六個,也就是說,最多通過五個人你就能夠認識任何一個陌生人。”如圖1所示。 圖1 六度空間示意圖 “六度空間”理論雖然得到廣泛的認

hdu 1874暢通工程續dijkstra演算法

暢通工程續 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su

貪心演算法之最短路徑問題Dijkstra演算法

1、問題 一個求單源最短路徑的問題。給定有向帶權圖 G =(V, E ), 其中每條邊的權是非負實數。此外,給定 V 中的一個頂點, 稱為源點。現在要計算從源到所有其他各頂點的最短路徑長 度,這裡路徑長度指路上各邊的權之和。 2、分析 3、程式碼實現 1、普通C

【ACM】帶權有向圖單源最短路徑Dijkstra演算法

最短路徑的第一類問題 求從單個源點到其餘各頂點的最短路徑。這是一種貪心策略,不可以存在負權邊。 演算法簡介 給定帶權有向圖G和源點v0,求從源點v0到G中其餘各頂點的最短路徑。迪傑斯特拉演算法是對

06-圖3 空間30 分

題目來源:中國大學MOOC-陳越、何欽銘-資料結構-2018春 作者: 陳越 單位: 浙江大學 問題描述: “六度空間”理論又稱作“六度分隔(Six Degrees of Separat