隣接テーブルで、頂点を削除し、削除する必要があるが、次のように削除ノード側に関連する他のノード、特定のコードを削除し、頂点配列に記憶されている: / * *隣接テーブル定義 *テイク結節点+グループ連結リストノード構造のエッジリスト * / 地図<文字列、整数> MMP;文字列との座標間//マッピング 構造体ArcNode //エッジリストノード { 文字列名; int型wigth; ArcNode *次; }; 構造体VertexNode //頂点ノードリスト { 文字列名; //名前 ArcNode * firstarc; //テーブルのエッジノードの最初の要素を指す }; クラスグラフ { プライベート: int型pointnum、eagenum; VertexNodeポイント[MAXN]; //頂点配列 ArcNode [MAXN] *最後に、テール・ノードへ//ポイント のint VIS [MAXN]; //タグ配列 intが[MAXN] DIS;から//配列 ボイドinsertElement(int型のPOS、ArcNode *の P)。 sortlistが、ボイド(VertexNodeはnil); 公共: グラフ(); //コンストラクタ ボイド(pointnum int型、int型eagenum)を作成し、 無効initvis(); 無効get_agree();の//出力 空DFS(文字列は、int型のフラグを始めます ) ; //深さ優先探索 のボイドBFS(文字列が始まる); // BFSの ボイドdfs_all(文字列開始); 空の並べ替え(); 無効bfs_all(文字列開始); int型get_connected_num(); //は、接続されているコンポーネントが見つける (is_connected BOOL ); //もし通信 ブールis_exit(文字列str); //少しがある場合 無効delete_point(文字列STR)は、 ダイクストラ(文字列の開始)を無効; プリム()を無効; クラスカルを無効(); // TODO:最小スパニングツリー、 プリントのボイド(); };
グラフ:: delete_pointボイド(文字列STR) { IF(pointnum == 0) { のprintf( "ザ・グラフは、N- \していない持っている"); リターン; } (is_exit(STR))IF { int型の位置= -1; / /頂点配列内の頂点の削除位置を表す ArcNode * P、* Q * R&LT; P =ポイント[MMP [STR] firstarc ;. ため(INT I = MMP [STR] +1し、I <pointnum; I ++は) {//反復頂点配列、および削除された頂点アレイ削除 ポイント[-I 1] .nameのポイント= [I] .nameのと、 ポイント[-I 1] = .firstarcポイント[I] .firstarc; MMP [点[。-I 1] .nameの] = -I 1; } pointnum--; //削除された頂点を削除すると、サイド情報を接続されている 一方、(P) { = P-Q>次に、 削除P; P = Qであり; } //他のエッジに関連付けられた頂点の削除 のために(INT I = 0;私は<pointnum; Iは++) { P =ポイント[I] .firstarc; 一方(P) { IF(str.compare(P->名)== 0) { (P ==ポイント[I] .firstarc)IF { ポイント[I]は、P-.firstarcを=>次に; } 他 { R- > = P-次>次に; } Q = P。 P = P->次に、 Qは削除; } そうでなければ { R&LT = P; P = P->次に; } } } COUT STRは<< << << ENDL "を削除しました"; //エンドノードを削除し、DFSとBFSに図の動作を行った後 / /初期化VIS COUT << "DFSは、" << ENDL; initvis()は、 のために(INT I = 0; I <pointnum; Iは++) { IF(VIS [I]!) DFS(ポイント[I] .nameの,. 1 ); } } 他 のprintf( "ポイントが行うノイ出口\ N-"); }