设为首页 加入收藏

TOP

简单的bfs
2018-10-21 16:09:14 】 浏览:47
Tags:简单 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;
}

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇uva 1590 - IP Networks(IP地址) 下一篇学习C语言第一天!

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目