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 }