题目解析:这道题也可以用深搜来判断图的连通性,其他的就跟之前的讲解一样了。
代码如下:
#include<stdio.h>
02.
#include<string.h>
03.
int
map[1010][1010],visit[1010],chu[1010];
04.
int
p,q;
05.
void
dfs(
int
cur)
06.
{
07.
visit[cur]=1;
08.
for
(
int
i=1;i<=p;i++)
09.
{
10.
if
(map[cur][i]==1)
11.
{
12.
chu[cur]++;
13.
if
(!visit[i])
14.
dfs(i);
15.
}
16.
}
17.
}
18.
int
main()
19.
{
20.
int
icase;
21.
scanf
(
"%d"
,&icase);
22.
while
(icase--)
23.
{
24.
memset
(map,0,
sizeof
(map));
25.
memset
(visit,0,
sizeof
(visit));
26.
memset
(chu,0,
sizeof
(chu));
27.
scanf
(
"%d%d"
,&p,&q);
28.
while
(q--)
29.
{
30.
int
a,b;
31.
scanf
(
"%d%d"
,&a,&b);
32.
map[a][b]=map[b][a]=1;
33.
}
34.
dfs(1);
35.
int
c1=0,c2=0;
36.
for
(
int
i=1;i<=p;i++)
37.
{
38.
if
(visit[i]==0)
39.
c1++;
40.
if
(chu[i]%2==1)
41.
c2++;
42.
}
43.
if
(c1==0&&(c2==0||c2==2))
44.
printf
(
"Yes\n"
);
45.
else
46.
printf
(
"No\n"
);
47.
}
48.
return
0;
49.
}