あなたは単に幅優先探索のため深さ優先探索またはキューためスタックでグラフを実装することができますよう
データ構造は、擬似コードで記述することができます
それぞれ、実際のネットワークでは、しかし1 4 2 5 3及びBFS 1 4 5 3 2 : は結果がDFSある
#include <vector>
#include <list>
#include <vector>
using namespace std;
class Graph
{
public:
int vert; //number of vertices
vector<list<int>> adj;
Graph(int _v)
{
adj.resize(_v);
vert = _v;
}
void addEdge(int v, int key)
{
adj[v].push_back(key);
adj[key].push_back(v); // comment out if undirected
}
void bfs(int start);
void dfs(int start);
};
void Graph::bfs(int start)
{
vector<bool> visited(vert,false);
list<int> queue;
visited[start] = true; // visit the first node
queue.push_back(start);
while (!queue.empty())
{
start = queue.front();
cout << start << " ";
queue.pop_front();
for (auto i = adj[start].begin(); i != adj[start].end(); ++i)
if (!visited[*i])
{
visited[*i] = true;
queue.push_back(*i);
}
}
cout << endl;
}
void Graph::dfs(int start)
{
vector<bool> visited(vert,false);
vector<int> stack;
visited[start] = true;
stack.push_back(start);
while (!stack.empty())
{
start = stack.back();
cout << start << " ";
stack.pop_back();
for (auto i = adj[start].begin(); i != adj[start].end(); ++i)
if (!visited[*i])
{
visited[*i] = true;
stack.push_back(*i);
}
}
cout << endl;
}
int main()
{
Graph g(6); // number of vertices we need
g.addEdge(1, 4);
g.addEdge(4, 2);
g.addEdge(4, 5);
g.addEdge(2, 5);
g.addEdge(5, 3);
g.bfs(1); // start with 1
g.dfs(1);
}
、我々はノードを開始するつもりだと仮定しますエッジは、エッジの距離または速度を意味する重み値を持ちます。
[深さ優先検索](https://en.wikipedia.org/wiki/Depth-first_search)のような意味ですか? – Dukeling
バックトラックが許可されている場合は、BFSまたはDFSを使用できます。そうでない場合はDFSを使用します。 – syntagma
そうですね。ゲームの名前を指摘してくれてありがとう:) – Svein