简单的bfs
Posted 张杨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单的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; }
以上是关于简单的bfs的主要内容,如果未能解决你的问题,请参考以下文章