トポロジカルソート(POJ 1094)

予備知識:トポロジカル整列

コード内の詳細なメモ

1  // 質問のタイトル明確な意味は、彼らがトポロジーの固有のシーケンスで構成することができるかどうかを判断するには、文字サイズの関係のセットを与えられています。
図2は、 // 一般的なトポロジカルソートであるが、出力フォーマットの3つのタイプがある:
 3。 
4。 //    1文字シーケンス順序、および順次出力する;
 5。 
6。 //    2.秩序ある配列を決定することができないか否か;
 7。 
8。 //    配列3.アルファベット順の間の矛盾は、すなわち、リングが存在します。
9  
10  //      と判断3つの形態の順である:最初の(3)環が存在するかどうかを決定する、
 11  // 次いで順序付けられたか否かを判断する(1)、最後に結果(2)かどうかを決定するためです。
12  // 注:(2)完全なビューを横断しなければならない、および(1)及び(3)の結果と、
 13  // プロセスの背面の入力が行われなかったであろう。
14  
15  // 問題があり、私は知らない、直接お答え秩序と出力を決定した後、される
 16  // 入力はもはや適切な治療ではありませんが、後者はそれがなり、再びリングに入ることを許可することができます
 17 // それらリング作るので、私はこの質問には、データの後ろに秩序を決定した後、彼らは持っていなかった、と思います。
18  // これは平均値であるべきである
。19の#include <cstdioを>
 20の#include <アルゴリズム>
 21であるの#include < 文字列・H>
 22であるの#include <math.h>の
 23での#include <キュー>
 24  使用 名前空間STD;
 25のtypedef ロング 長いLL;
 26である CONST  INT MAXN 1E2 + = 10 ;
 27  INT G [ 30 ] [ 30 ];
 28  INT  における [ 30 ];
 29 INT Q [ 30 ]。
30  ボイドのinit()
 31  {
 32      のmemset(G、0はsizeof(G))。  // 
33      のmemset(0はsizeof))。  // 入度
34  }
 35  INT Toposort(INT N)
 36  {
 37      INT目指します。int型のベビーベッド= 0 ;
38      のint tmpin [ 30 ]。
39      INT=内のフラグ1 ;   // 1順序付け
40      のためのint型私は= 1 ; I <= N; I ++)は、[I] tmpin =  [I];   //のにtmpinの内部にコピー
41である     ためINT I = 1 ; I <= N - 、I ++ ){
 42が         INT NUM = 0 ;
 43である         ためINT J = 1。 ; J <= N; J ++ 44である             IF(tmpin [J])NUM ++、AIM = J ;!   / / ここ数の決意、目的点の度合いが0ということである
 45              // が発生した場合、侵入の複数の、それが最後尾動作する第1の選択であろう。
46れる         IF(NUM!)リターン 0 ;  // 有环、
47          であれば(NUM> 1)フラグ= - 1// 无序
48          Q [ベビーベッド++] = 目指します。  
49          tmpin [目指し] = - 1 50          のためにINT J = 1 J ++; J <= N 51              であれば [J] tmpin(G [狙い] [J]) - 52      }
 53      リターンフラグ。
54  
55  }
 56  のint main()の
 57  {
 58      int型N、M。
59     一方、(scanf関数(" %d個の%のD "!、&N、&M)= EOF){
 60          であれば(!N && m)のブレーク61          のinit();
62          チャー STR [ 5 ]。
63          のintフラグ= 0 64          のためにint型 I = 1 ; I <= M Iは++ ){
 65              のscanf(" %sの" 、STR)。
66              場合(フラグ)が継続;
67              INTのL =のSTRは、[ 0 ] - [ A '+ 1 68              INT R = STR [ 2 ] - ' ' + 1 69              G [L] [R] = 1 70  [R] ++ ;
71 INTの裁判官= Toposort(N)。
72 // 有环73 の場合のprintf((裁判官!)" 矛盾%dの関係後に発見された\ N。"、i)は、フラグ= 1 ;
74 であれば(判定== 1){   // 有序75                  のprintf("                                       
                          
ソート%dの関係の後に決定された配列:"I);
 76 INT J = 0 ; J <N; J ++ 77と                      のprintf(" %のC "、Q [J] + ' ' - 1 );
 78                  のprintf("\ n " );
 79                  フラグ= 1 ;
 80             }
 81         }
 82 // 无序83 なら!(フラグ)のprintf("                            
         ソートされた配列を決定することができない\ N。" );
 84      }
 85      リターン 0 ;
 86 }

 

おすすめ

転載: www.cnblogs.com/pangbi/p/11758234.html