判断是否为一棵树?
菜鸟思路。。。

1: 0 0 空树是一棵树
2: 1 1 0 0 不是树 不能自己指向自己
3: 1 2 1 2 0 0 不是树....自己开始一直在这么WA  好郁闷 重复都不行呀~~5555
4: 1 2 2 3 4 5 不是树  森林不算是树(主要是注意自己)
5: 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 1  注意 一个节点在指向自己的父亲或祖先 都是错误的 即 9-->1 错
6: 1 2 2 1 0 0 也是错误的

#include  < iostream >
#include 
< vector >
#include 
< string >
using   namespace  std;


int  main()
{
    
    vector
<bool> result;      
    
while(1)
    
{
        
int a[100][2];     //记录输入数据
        bool tree;
        
int i=0;cin>>a[i][0]>>a[i][1];
        
if (a[i][0]==-1&&a[i][1]==-1)
        
{
            
break;
        }

        
while (1)
        
{
            tree
=true;
            
if (a[i][0]==0&&a[i][1]==0)
            
{
                
break;
            }

            i
++;
            cin
>>a[i][0]>>a[i][1];
        }

        
char root[100];     //记录是否为根,1是,0不是
        memset(root,1,100);
        
for (int k=0;k<i;k++)
        
{
            
if (a[k][0]==a[k][1])
            
{
                tree
=false;
            }

            
if (tree==true)
            
{
                
for (int j=0;j<i;j++)
                
{
                    
if (k!=j)
                    
{
                        
if (a[k][1]==a[j][1])   //不同节点指向相同节点,非树
                        {
                            tree
=false;
                            
break;
                        }

                        
if (a[k][0]==a[j][1])   //有节点指向,非根
                        {
                            root[k]
=0;
                        }

                    }

                }

            }
   
            
else
                
break;
        }
 
        
int num=0;
        
if (i!=0&&tree==true)
        
{
            
for (int j=0;j<i;j++)    //判断根的数量
            {
                
if (root[j]!=0)
                
{
                    
for (int k=j+1;k<i;k++)
                    
{
                        
if (root[k]!=0&&a[j][0]==a[k][0])   //排除相同根情况
                        {
                            root[k]
=0;
                        }

                    }

                    num
++;
                }

            }

            
if (num==0||num>1)
            
{
                tree
=false;
            }

        }


        result.push_back(tree);
    }

    
    
for (size_t k=0;k<result.size();k++)
    
{
        
if (result[k]==true)
        
{
            cout
<<"Case "<<k+1<<" is a tree."<<endl;
        }

        
else
        
{
            cout
<<"Case "<<k+1<<" is not a tree."<<endl;
        }

        
    }

}