SDUT- 2138 資料結構實驗之圖論三:判斷可達性
阿新 • • 發佈:2018-12-15
#include <stdio.h> #include <string.h> #include <stdlib.h> int a[1005][1005]; int vis[1005]; int qu[100005], front, tail; void init() { memset(a, 0, sizeof(a)); memset(vis, 0, sizeof(vis)); front = tail = 0; } int main() { int t, n, m, i, j; while(scanf("%d %d", &n, &m) != EOF) { init(); for(i = 1; i <= m; i++) { int u, v; scanf("%d %d", &u, &v); a[u][v] = 1; } qu[tail++] = n; int flag = 0; while(front < tail) { int w = qu[front++]; vis[w] = 1; if(w == 1){flag = 1;break;} for(i = 1; i <= n; i++) { if(a[w][i] == 1 && vis[i] == 0){qu[tail++] = i; vis[i] = 1;} } } if(flag == 1)printf("YES\n"); else printf("NO\n"); } return 0; }