简单的bfs
程序员文章站
2022-04-04 23:41:26
这里主要是写的一个简单的bfs,实例运行了RMAT10无向图,总共有1024个顶点。这种简单的bfs算法存在很明显的缺陷,那就是如果图数据过大,那么进程将会直接被系统杀死。 代码如下: ......
这里主要是写的一个简单的bfs,实例运行了RMAT10无向图,总共有1024个顶点。这种简单的bfs算法存在很明显的缺陷,那就是如果图数据过大,那么进程将会直接被系统杀死。
代码如下:
#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; }
上一篇: 洪荒之力都要按耐不住了
下一篇: 喵星人也分居呢