【poj解题】1308
生活随笔
收集整理的這篇文章主要介紹了
【poj解题】1308
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
判斷一個圖是否是一個樹,樹滿足一下2個條件即可:
1. 邊樹比node數少1
2. 所有node的入度非0即1
節點數是0的時候,空樹,合法樹~
代碼如下
?
#include <stdio.h> #include <stdlib.h> #include <string.h>#define MAX 100int matrix[MAX][MAX]; int node[MAX] = {0}; int N = 0; int M = 0;int check() {int i, j;int sum;if(N == 0) {return 1; } if(N != M + 1) {return 0; } /* 每個節點的入度非0則1 */for(i = 0; i < MAX; i++) {sum = 0;for(j = 0; j < MAX; j++) {sum += matrix[j][i]; } if(sum == 0 || sum == 1) {;}else {return 0; }}/* 判斷圖中無環 */return 1; }void print() {int i, j;for(i = 0; i < 10; i++) {for(j = 0; j < 10; j++) {printf("%d ", matrix[i][j]); } printf("\n");} }int main() {int u,v;int flag = 1;int count = 0;int i;while(flag) {/* init */N = 0;M = 0;memset(node, 0, sizeof(node));memset(matrix, 0, sizeof(matrix));while(1) {scanf("%d%d", &u, &v);if(u == -1 && v == -1) {flag = 0;break; }if(u == 0 && v == 0) {; }else {u --;v --;M ++;if(0 == node[u]) {node[u] = 1; N ++;}if(0 == node[v]) {node[v] = 1; N ++;}matrix[u][v] = 1;continue;}count ++;if(check()) {printf("Case %d is a tree.\n", count); }else {printf("Case %d is not a tree.\n", count); } break;}}return 0; }
轉載于:https://www.cnblogs.com/igloo1986/p/3534805.html
總結
以上是生活随笔為你收集整理的【poj解题】1308的全部內容,希望文章能夠幫你解決所遇到的問題。