PTAタイトルセットのデータ構造とアルゴリズム(中国)7-32

PTAタイトルセットのデータ構造とアルゴリズム(中国)7-32

7-32ケーニヒスベルクの「セブンブリッジズ」(25ポイント)
 

図に示すように、ケーニヒスベルクPは、これらを接続する2つの島七のブリッジを含む疲れ都市グリッド川、上に配置されています。

この7つのブリッジ、および各ブリッジは一度しか来てどうか?スイスの数学者オイラー(レオンハルトオイラー、1707年から1783年)は、最終的に問題を解決し、これにより、トポロジの作成。

この問題は、今オイラーの問題かどうかを決定するように記述することができます。オイラー紙オフペンをしない指し、一度だけ図に各エッジを塗装することができ、ループの開始点に戻ることができます。今無向グラフが与えられ、オイラーどうかが尋ねましたか?

入力フォーマット:

最初のラインの入力はそれぞれ、2つの正の整数を与え、ノードNは(及びエッジ数1)Mは、続いて対応するM行M側、各行は、それぞれ、正の整数の組が与えられ、エッジストリップは直接連通していますどの2つのノードない(にノード1 号N)。

出力フォーマット:

出力1、出力0であればオイラー回路さもなければ。

サンプル入力1:

6 10
1 2
2 3
3 1
4 5
5 6
6 4
1 4
1 6
3 4
3 6

出力サンプル1:

1

サンプル入力2:

5 8
1 2
1 3 2 3 2 4 2 5 5 3 5 4 3 4 

出力サンプル2:

0
トピック分析:マップ問題が知る必要がある解決の問題を横断する図でもあり、唯一すべての頂点度場合図形グラフ接続されている場合オイラー回路への必要十分条件が存在しないことです
1  の#define _CRT_SECURE_NO_WARNINGS
 2の#include <stdio.hの>
 3の#include < 文字列・H>
 4の#include < malloc関数 .H>
 5  
6のtypedef 構造体のeNode * エッジ。
7  構造体のeNode
 8  {
 9      int型V1、V2。
10  }。
11のtypedef 構造体 GNODE * グラフ。
12  構造体GNODE
 13  {
 14      INT G [ 1010 ] [ 1010 ]。
15     int型ネ。
16      int型のNv。
17  }。
18  
19  のint度[ 1010 ]。
20  INT収集[ 1010 ]。
21  INTフラグ= 1 22  INT IsEdge(int型 V1、int型V2、グラフGraか)
 23  {
 24      リターン Gra-> G [V1]、[V2]。
25  }
 26  ボイド挿入(グラフGraか、エッジE)
 27  {
 28      Gra-> G [E-> V1] [E-> V2] = 1 29     Gra-> G [E-> V2] [E-> V1] = 1 30  }
 31グラフCreateGraph(INT NV)
 32  {
 33      グラフGraか=(グラフ)はmallocはsizeof構造体GNODE))。
34      Gra-> NE = 0 35      Gra->のNv = Nvと;
36      のためにint型 I = 1 ; I <= Gra-> NvのI ++ 37          のためのINT J = 1 ; J <= Gra->ネバダ州; J ++ 38              Gra-> G [I] [J] = 0;
39      リターンGraか。
40  }
 41  
42  グラフBuildGraph()
 43  {
 44      のint N、M。
45      のscanf(" %d個の%のD "、&​​N、&M)。
46      グラフGraか= CreateGraph(N)。
47      エッジE =(エッジ)はmallocはsizeof構造体eノード))。
48      のためにint型 I = 0 ; iがMを<; Iは++ 49      {
 50          のscanf(" %D%dの"、&​​(E-> V1)、および(E-> V2))。
51          度【E-> V1] ++ ;
52          度【E-> V2] ++ ;
53          インサート(Graか、E)。
54      }
 55      リターンGraか。
56  }
 57  
58  空隙 DFS(グラフGraか、int型V)
 59  {
 60      のためのint型 i = 1 ; iが++; I <= Gra->ネバダ州61          場合!収集された([I] &&をIsEdge(V、I、Graか) )
 62          {
 63が              収集[I] = 1 64             もし(度[I]%2 == 1 65                  フラグ= 0 66              DFS(Graか、I)。
67          }
 68  }
 69  INT集められる(INT NV)
 70  {
 71      のためにint型 i = 1 ; iは=ネバダ州<; iは++ 72          であれば(!収集[I])
 73              リターン 0 74      リターン 1 75  }
 76  のint main()の
 77 {
 78      グラフGraか= BuildGraph()。
79      DFS(Graか、1 )。
80      であれば(フラグ&&集められる(Gra-> NV))
 81          のprintf(" 1 " )。
82      他の
83          のprintf(" 0 " )。
84 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/57one/p/11649820.html