简单的bfs

这里主要是写的一个简单的bfs,实例运行了RMAT10无向图,总共有1024个顶点。这种简单的bfs算法存在很明显的缺陷,那就是如果图数据过大,那么进程将会直接被系统杀死。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>
#include <iostream>
#include <map>
#include <vector>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
using namespace std;
#define MAX_NODES 1024
float edges[MAX_NODES][MAX_NODES];
bool IsVisited[MAX_NODES];
int main(){
    for(int i=0;i<MAX_NODES;i++){
        for(int j=0;j<MAX_NODES;j++)
            edges[i][j]=-1;//-1 represents no link
        IsVisited[i]=false;
    }
    int fd1;
    fd1=open("../zhangyangData/RMAT10_undirect",O_RDONLY,0);
    if(fd1==-1){
        cout<<"error "<<endl;
        return 0;
    }
    int s,t;
    float f;
    while(read(fd1,&s,4)>0&&n>0){
        read(fd1,&t,4);
        read(fd1,&f,4);
        //cout<<s<<" "<<t<<":"<<f<<endl;
        edges[s][t]=1;
    }
    int flag=0,count=0;
    for(int i=0;i<MAX_NODES;i++){
        for(int j=0;j<MAX_NODES;j++){
            if(edges[i][j]==1) flag=1;
            //cout<<edges[i][j]<<" ";
        }
        if(flag) count++;
        //cout<<endl;
    }
    cout<<count<<endl;
    vector<int> ves;
    ves.push_back(1023);
    while(!ves.empty()){
        int next_node=*ves.begin();
        cout<<next_node<<" ";
        IsVisited[next_node]=true;
        cout<<IsVisited[next_node]<<endl;
        ves.erase(ves.begin());
        for(int i=0;i<MAX_NODES;i++){
            if(edges[next_node][i]>0&&IsVisited[i]==false){                                                                                  ves.push_back(i);
                   IsVisited[i]=true;
            }
        }
        if(ves.empty()){
            for(int i=0;i<MAX_NODES;i++){
                if(IsVisited[i]==false)
                    ves.push_back(i);
            }
        }
    }
    return 0;
}

 

posted @   张杨  阅读(297)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
历史上的今天:
2016-04-23 onclick事件与onserverclick事件
点击右上角即可分享
微信分享提示