hdoj 1325是不是树

#include<iostream>
#include<stdio.h>
#include<string>
using namespace std;
#define MAX 1000
int map[MAX][MAX];
int number[MAX];//这一行的-1的个数
int HasNumber[MAX];//这一行是不是有数
int check()
{
	int i,j;int flag=0;
	for(i=0;i<MAX;i++)
	{
		//如果说这一行全是0表明没有数据
		int quanling=1;
		for(j=0;j<MAX;j++)
		{
			if(map[i][j]!=0)
			{
				quanling=0;
			}
		}

		if(quanling)
		{
			HasNumber[i]=0;
		}

		//如果这一行不是全零才需要处理
		if(!quanling)
		{
			for(j=0;j<MAX;j++)
			{
				if(map[i][j]==-1)
					number[i]++;
			}
		}
	}


	//开始判断是不是树,第一,只有一个有数的行没有-1
	//                  第二,每一有数的行只有一个-1

	//第一个条件
	int N1=0;//没有-1的行
	for(i=0;i<MAX;i++)
	{
		if(HasNumber[i]&&number[i]==0)
		{
			N1++;HasNumber[i]=0;//我门把没有-1的行认为是没有数,这样下面好处理	
		}
	}
	if(N1!=1)
	{
		return 0;
	}

	//第二个条件
	for(i=0;i<MAX;i++)
	{
		if(!HasNumber[i])
		{
			continue;
		}
		if(number[i]==1)
		{
			continue;
		}
		return 0;
	}

	return 1;

}
int main()
{
	//freopen("input.txt","in",stdin);
	int a,b;int i,j;int casen=0;
	while(scanf("%d%d",&a,&b))
	{
		if(a<0&&b<0)
		{
			return 0;
		}

		casen++;
		//如果第一组输入就是结束
		if(a==0&&b==0)
		{
			printf("Case %d is not a tree.\n",casen);
		}

		//初始化
		for(i=0;i<MAX;i++)
		{
			HasNumber[i]=1;
			number[i]=0;
			for(j=0;j<MAX;j++)
			{
				map[i][j]=0;
			}
		}

		map[a][b]=1;map[b][a]=-1;

		while(scanf("%d%d",&a,&b))
		{
			//如果结束
			if(a==0&&b==0)
				break;
			map[a][b]=1;map[b][a]=-1;
		}

		//开始处理。
		if(check())
		{
			printf("Case %d is a tree.\n",casen);			
		}
		else
		{
			printf("Case %d is not a tree.\n",casen);
		}


	}
	return 0;
}

/*
1 	while(scanf("%d%d",&a,&b)) 这样写换行也不怕。
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值