zoukankan      html  css  js  c++  java
  • 【poj解题】1308

    判断一个图是否是一个树,树满足一下2个条件即可:
    1. 边树比node数少1
    2. 所有node的入度非0即1

    节点数是0的时候,空树,合法树~

    代码如下

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAX 100
    
    int 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("
    ");
        }    
    }
    
    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.
    ", count);    
                }
                else {
                    printf("Case %d is not a tree.
    ", count);    
                } 
                break;
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    CDI Features
    Java Design Patterns
    pyautogui
    TCP/UDP的套接字Socket通信工作流程
    TCP连接的建立与释放(三次握手、四次挥手)
    python实现单例模式的三种方式及相关知识解释
    面向对象的三个基本特征
    网络编程
    初识python
    目录
  • 原文地址:https://www.cnblogs.com/igloo1986/p/3534805.html
Copyright © 2011-2022 走看看