图的遍历(PTA题目解答)

来源:互联网 发布:csgo残局 知乎 编辑:程序博客网 时间:2024/03/29 16:07



mycode:

#include <iostream>#include <vector>#include <queue>using namespace std;void dfs(vector<vector<int>> a,int i,vector<int> &test,vector<int> &dfs_sub){test[i] = 1;for (int j = 0; j < a[i].size(); j++){if (a[i][j] == 1&& !test[j]){dfs_sub.push_back(j);dfs(a, j,test,dfs_sub);}}return;}int main(int argc, char *argv[]){int n;int e;cin >> n;cin >> e;vector<vector<int> > res(n,vector<int>(n,0));vector<vector<int> > dfs_num;vector<int> dfs_sub;int count = 0;while (count < e){int a, b;cin >> a;cin >> b;res[a][b] = 1;res[b][a] = 1;count++;}//dfsvector<int> test(n, 0);for (int i = 0; i < n; i++){if (!test[i]){dfs_sub.push_back(i);dfs(res, i,test,dfs_sub);dfs_num.push_back(dfs_sub);dfs_sub.clear();}}for (int i = 0; i < dfs_num.size(); i++){cout << "{ ";for (int j = 0; j < dfs_num[i].size(); j++){cout << dfs_num[i][j] << " ";}cout << "}"<<endl;}//bfsvector<int> test_bfs(n,0);queue<int> bfs_que;vector<vector<int> > bfs_num;vector<int> bfs_sub;for (int i = 0; i < n; i++){if (!test_bfs[i]){bfs_sub.push_back(i);test_bfs[i] = 1;bfs_que.push(i);while (!bfs_que.empty()){int m = bfs_que.front();bfs_que.pop();for (int j = 0; j < res[m].size(); j++){if (res[m][j] == 1 && !test_bfs[j]){test_bfs[j] = 1;bfs_sub.push_back(j);bfs_que.push(j);}}}bfs_num.push_back(bfs_sub);bfs_sub.clear();}}for (int i = 0; i < bfs_num.size(); i++){cout << "{ ";for (int j = 0; j < bfs_num[i].size(); j++){cout << bfs_num[i][j] << " ";}cout << "}";cout << endl;}return 0;}


0 0
原创粉丝点击