DFS,BFS
代碼顯示爲輸出連通集
算法時間複雜度:
採用鄰接表存儲圖:DFS和BFS都爲O(N+E)
採用鄰接矩陣存儲:DFS和BFS都爲O(N^2);
數據結構設計
struct vertex
{
int id;
vector<int> adjacencyList;
};
vector<bool> visited(N,false);
vector<vertex> vertexList(N);
DFS
void dfs(int s,vector<bool>&visited,vector<int>&path,vector<vertex>vertexList)
{
vector<int> v = vertexList[s].adjacencyList;
for (int i=0; i<v.size(); ++i)
{
if(visited[v[i]]==false)
{
path.push_back(v[i]);
visited[v[i]] = true;
dfs(v[i], visited, path, vertexList);
}
}
}
BFS
void bfs(int s,vector<bool>&visited,vector<int>&path,vector<vertex>vertexList)
{
queue<int>q;
q.push(s);
while (!q.empty())
{
int cur = q.front();
q.pop();
vector<int> v = vertexList[cur].adjacencyList;
for (int i=0; i<v.size(); ++i)
{
if(visited[v[i]]==false)
{
path.push_back(v[i]);
visited[v[i]] = true;
q.push(v[i]);
}
}
}
}