1004 (BFS,DFS) vector

来源:互联网 发布:win10端口设置在哪里 编辑:程序博客网 时间:2024/06/04 22:09

正好通过PAT好好学习了下c++

这些代码都是我边读边理解算法和c ++,侵删,柳婼姐一定不会生气的吐舌头


这段代码很好的诠释了DFS的思想


#include <cstdio>#include <vector>#include <algorithm>using namespace std;vector<int> v[100];int book[100], maxdepth = -1;void dfs(int index, int depth) {    if(v[index].size() == 0) {                                    //顶到头结束递归        book[depth]++;//这层的叶子结点加一个        maxdepth = max(maxdepth, depth);   //求一个最大深度        return ;    }    for(int i = 0; i < v[index].size(); i++)        dfs(v[index][i], depth + 1);}int main() {    int n, m, k, node, c;    scanf("%d %d", &n, &m);    for(int i = 0; i < m; i++) {        scanf("%d %d",&node, &k);        for(int j = 0; j < k; j++) {            scanf("%d", &c);            v[node].push_back(c);        }    }    dfs(1, 0);    printf("%d", book[0]);//先输出第0层的    for(int i = 1; i <= maxdepth; i++)        printf(" %d", book[i]);    return 0;}

太好了,BFS也想起来了。

#include <cstdio>#include <queue>#include <vector>#include <algorithm>using namespace std;int level[100], book[100], maxlevel = -1;vector<int> v[100];void bfs() {    queue<int> q;    q.push(1);    level[1] = 0;  //这个点所在的层数    while(!q.empty()) {        int index = q.front();        q.pop();        maxlevel = max(level[index], maxlevel);        if(v[index].size() == 0)            book[level[index]]++;        for(int i = 0; i < v[index].size(); i++) {            q.push(v[index][i]);//先把这一层的全部弹入,再一个一个弹出            level[v[index][i]] = level[index] + 1;        }    }}int main() {    int n, m, k, node, c;    scanf("%d %d", &n, &m);    for(int i = 0; i < m; i++) {        scanf("%d %d",&node, &k);        for(int j = 0; j < k; j++) {            scanf("%d", &c);            v[node].push_back(c);        }    }    bfs();    printf("%d", book[0]);    for(int i = 1; i <= maxlevel; i++)        printf(" %d", book[i]);    return 0;}



原创粉丝点击