アルゴリズムグラフファイバーネットワークスケルトン

イカれろ

ファイバーネットワークスケルトンを行うための演習があります。各ノードはIPアドレスで表されます。入力時に、ネットワークを構築するコマンド(B)を取得し、次に、あるノードと別のノードの間に接続があるかどうかを確認するコマンド(T)を取得します。

  • B 100.100.100.1 100.100.100.2
  • B 100.100.100.1 100.100.100.3
  • B 100.100.100.10 100.100.100.11
  • T 100.100.100.1 100.100.100.3
  • T 100.100.100.10 100.100.100.2
  • T 100.100.100.10 100.100.100.11
  • B 100.100.100.11 100.100.100.2
  • T 100.100.100.10 100.100.100.3
  • T 100.100.100.100 100.100.100.103

すべてのTコマンドについて、私は答えなければなりません:はいまたはいいえ。したがって、この例では次のようになります。YNYYN.良い結果が得られましたが、実行時間でソリューションが失敗します-ここで確認します:https://pl.spoj.com/problems/TFIBRE/

私のコード(編集済み):

#include <iostream>
#include <string>
#include <unordered_map>
#include <list>
#include <set>
#include <arpa/inet.h>

using namespace std; 
class Graph 
{ 
    std::unordered_map<uint32_t, bool> visited;
    std::unordered_map<uint32_t, set<uint32_t>> adj; 

    bool DFSUtil(const uint32_t& v, const uint32_t&, std::unordered_map<uint32_t, bool>& visited); 
public:
    
    Graph(): visited{}, adj{}
    {}
    
    void addEdge(const uint32_t& v, const uint32_t& w); 
    bool DFS(const uint32_t& v, const uint32_t& el);
}; 

void Graph::addEdge(const uint32_t& v, const uint32_t& w) 
{ 
    adj[v].insert(w);
    adj[w].insert(v);
} 
  
bool Graph::DFSUtil(const uint32_t& v, const uint32_t& el, std::unordered_map<uint32_t, bool>& visited) 
{ 
    if (v == el){
        return true;
    }

    visited[v] = true; 

    set<uint32_t>::iterator i;
    for (i = adj[v].begin(); i != adj[v].end(); ++i)
        if (!visited[*i]){
            if(DFSUtil(*i, el, visited))
                return true;
            else
                continue;
        }
    return false;
} 
  
bool Graph::DFS(const uint32_t& v, const uint32_t& el) 
{ 
    visited.clear();
    
    for (std::pair<uint32_t, set<uint32_t>> element : adj)
        visited[element.first] = false;

    return DFSUtil(v, el, visited); 
}

int main() 
{ 
    Graph g;
    char command;
    char addr1[16];
    char addr2[16];
    
    in_addr ip1;
    in_addr ip2;

    
    while (scanf("%c %s %s ", &command, addr1, addr2) == 3)
    {        
        inet_aton(addr1, &ip1);
        inet_aton(addr2, &ip2);
        
        if (command == 'B')
            g.addEdge(ip1.s_addr, ip2.s_addr);
        else
            cout << (g.DFS(ip1.s_addr, ip2.s_addr) ? "T\n" : "N\n");
    }
    return 0; 
} 

検索に最も時間がかかります。これを改善するために何ができますか?たぶん私はstlコンテナを使うべきではありませんか?しかし、それでは何を使うのでしょうか?

mcdowella

リンクが双方向であり、距離に制限がない場合は、https://en.wikipedia.org/wiki/Disjoint-set_data_structure(別名Union-Find)を使用してみてくださいリンクが表示されたら、リンクの両端を所有するセットをマージします。接続をテストするには、両端が同じセットにマージされているかどうかを確認します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

パスファインディングPythonアルゴリズムのバックトラッキング

分類Dev

ネットワークをモデル化するグラフ上のダイクストラアルゴリズム

分類Dev

ネットワークフローアルゴリズムの適切なグラフ表現

分類Dev

クイックソートアルゴリズムのスタックオーバーフローエラー

分類Dev

ダイクストラアルゴリズムの代替案-グラフの最短経路、バスルート

分類Dev

ニューラルネットワークフレームワークとRLアルゴリズムライブラリの違いは何ですか?

分類Dev

トークンバケットアルゴリズムベースの非同期セマフォ

分類Dev

ネットワークフローアルゴリズム関連の問題

分類Dev

スケーラブルなマルチスレッドクライアント/サーバーネットワークアプリケーションのフレームワーク

分類Dev

アルゴリズムの進行状況を示すためのネットワークグラフのアニメーション化

分類Dev

フラッドライトコントローラールーティングアルゴリズム

分類Dev

ニューラルネットワークの逆伝播アルゴリズムがXORトレーニングパターンでスタックする

分類Dev

ヘクスのスターパスファインディングアルゴリズムのバグ

分類Dev

ログファイルデータで使用するためのニューラルネットワークのアプリケーション

分類Dev

グラファイト、データ表示中の平均化アルゴリズム

分類Dev

ソーシャルネットワークで密接な関係を見つけるためのアルゴリズム(グラフ理論)

分類Dev

バリアントスケジューリングアルゴリズム

分類Dev

アルファベータプルーニングアルゴリズムのタイドルート

分類Dev

トークンバケットアルゴリズム、レート制限JavaScript?

分類Dev

Javaネットワーククライアントサーバー(ファイルスネーディング)、クライアント受信ループでスタック

分類Dev

Robo-Windowsタスクスケジューラを使用してGoogleファイルストリームとネットワークドライブ間でファイルをコピーすると、「アクセスが拒否されました」

分類Dev

マーカーサイズ/アルファスケーリングとウィンドウサイズ/プロット/散布図のズーム

分類Dev

マーカーサイズ/アルファスケーリングとウィンドウサイズ/プロット/散布図のズーム

分類Dev

オントロジーのグラフレイアウトアルゴリズム(有向非巡回グラフ)

分類Dev

Pythonネットワークソケット-クライアントが散発的にフリーズする

分類Dev

遺伝的アルゴリズムでフィットネススケーリングが必要なのはなぜですか?

分類Dev

WP8:バックグラウンドエージェントとアプリワイヤーストレージファイル間の通信?

分類Dev

Neo4jAPOCとグラフアルゴリズムのインストールNeo.ClientError.Procedure.ProcedureRegistrationFailed

分類Dev

バッファを使用して画像をダウンスケール/補間するアルゴリズム?

Related 関連記事

  1. 1

    パスファインディングPythonアルゴリズムのバックトラッキング

  2. 2

    ネットワークをモデル化するグラフ上のダイクストラアルゴリズム

  3. 3

    ネットワークフローアルゴリズムの適切なグラフ表現

  4. 4

    クイックソートアルゴリズムのスタックオーバーフローエラー

  5. 5

    ダイクストラアルゴリズムの代替案-グラフの最短経路、バスルート

  6. 6

    ニューラルネットワークフレームワークとRLアルゴリズムライブラリの違いは何ですか?

  7. 7

    トークンバケットアルゴリズムベースの非同期セマフォ

  8. 8

    ネットワークフローアルゴリズム関連の問題

  9. 9

    スケーラブルなマルチスレッドクライアント/サーバーネットワークアプリケーションのフレームワーク

  10. 10

    アルゴリズムの進行状況を示すためのネットワークグラフのアニメーション化

  11. 11

    フラッドライトコントローラールーティングアルゴリズム

  12. 12

    ニューラルネットワークの逆伝播アルゴリズムがXORトレーニングパターンでスタックする

  13. 13

    ヘクスのスターパスファインディングアルゴリズムのバグ

  14. 14

    ログファイルデータで使用するためのニューラルネットワークのアプリケーション

  15. 15

    グラファイト、データ表示中の平均化アルゴリズム

  16. 16

    ソーシャルネットワークで密接な関係を見つけるためのアルゴリズム(グラフ理論)

  17. 17

    バリアントスケジューリングアルゴリズム

  18. 18

    アルファベータプルーニングアルゴリズムのタイドルート

  19. 19

    トークンバケットアルゴリズム、レート制限JavaScript?

  20. 20

    Javaネットワーククライアントサーバー(ファイルスネーディング)、クライアント受信ループでスタック

  21. 21

    Robo-Windowsタスクスケジューラを使用してGoogleファイルストリームとネットワークドライブ間でファイルをコピーすると、「アクセスが拒否されました」

  22. 22

    マーカーサイズ/アルファスケーリングとウィンドウサイズ/プロット/散布図のズーム

  23. 23

    マーカーサイズ/アルファスケーリングとウィンドウサイズ/プロット/散布図のズーム

  24. 24

    オントロジーのグラフレイアウトアルゴリズム(有向非巡回グラフ)

  25. 25

    Pythonネットワークソケット-クライアントが散発的にフリーズする

  26. 26

    遺伝的アルゴリズムでフィットネススケーリングが必要なのはなぜですか?

  27. 27

    WP8:バックグラウンドエージェントとアプリワイヤーストレージファイル間の通信?

  28. 28

    Neo4jAPOCとグラフアルゴリズムのインストールNeo.ClientError.Procedure.ProcedureRegistrationFailed

  29. 29

    バッファを使用して画像をダウンスケール/補間するアルゴリズム?

ホットタグ

アーカイブ