2570900_ac_0ms_236k.cpp

来自「北大大牛代码 1240道题的原代码 超级权威」· C++ 代码 · 共 78 行

CPP
78
字号
#include <stdio.h>
#include <string.h>

char v[200];
int map[200][200];
int d, dd[200];
int visited[200];
int flag, start, mark[200];

void dfs(int v)
{
	int i;

	visited[v] = 1;
	for(i = 0; i < d; i++)
		if(map[v][i]&&!visited[i])
			dfs(i);
}

int conected()
{
	int i;

	memset(visited,0,sizeof(visited));
	dfs(start);
	for(i = 0; i < d; i++)
		if(!visited[i]&&mark[i])
			return 0;
	return 1;
}

int main()
{
	int i;
	char tmp[10000], ch, ci;

	while(gets(tmp)!=NULL)
	{
		d = 'z'+1;flag = 0;
		memset(mark,0,sizeof(mark));
		memset(map,0,sizeof(map));
		memset(dd,0,sizeof(dd));
		i = 0;
		while(1)
		{
			for(; tmp[i]!='('&&tmp[i]!='\0'; i++);
			if(tmp[i]=='\0')
				break;
			i++;
			ch = tmp[i];
			start = ch;
			ci = tmp[i+2];
			mark[ch] = mark[ci] = 1;
			map[ch][ci] = map[ci][ch] = 1;
			dd[ch]++,dd[ci]++;
		}
		if(!conected())
		{
			printf("No No\n");
			continue;
		}
		else
		{
			int	num = 0;
			for(i = 0; i < d; i++)
				if(dd[i]%2)
					num++;
			if(num==2)
				printf("Yes No\n");
			else
				if(num==0)
					printf("No Yes\n");
				else
					printf("No No\n");
		}
	}
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?