予備知識:トポロジカル整列
コード内の詳細なメモ
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 }