zoukankan      html  css  js  c++  java
  • 十度好友问题

    题目:

    比如A认识B,B认识C,但是A不认识C, 那么称C是A的二度好友。找出某个人的所有十度好友. 数据量为10万;

    本题是BFS算法的一个经典应用;

    首先图的定义如下:

    const int N=100;
    typedef struct node* node_pointer;
    typedef struct node
    {
        int vertex;
        struct node *link;
    };
    node_pointer graph[N];
    int start=0;//其实顶点;
    int deepth=10;//深度为10,10度好友;
    

    利用BFS算法依次遍历图中的顶点,遍历时遇到已经遍历过的顶点不插入队列;

    代码如下:

    void find(node_pointer graph[],int n,int start,int deepth)
    {
    	std::queue<int> q;
    	int visited[N];
    	for(int i=0;i<N;i++)
    		visited[i]=false;
    	int cur,count,last;
    	q.push(start);
    	while(!q.empty()&&deepth>-1)
    	{
    		int count=0;
    		last=q.size();
    		while(count<last)
    		{
    			cur=q.front();
    			current=graph[cur];
    			q.pop();
    			visited[cur]=true;
    			while(current!=NULL)
    			{
    				if(!visited[current->vertex])
    					q.push(current->vertex);
    				current=current->link;
    			}
    			count++
    		}
    		deepth--;
    	}
    	cout<<"The deephth friends of "<<start<<" are :"<<endl;
    	while(!q.empty())
    	{
    		cout<<q.front()<<" ";
    		q.pop();
    	}
    }



  • 相关阅读:
    【JAVA
    【Android
    【开发工具
    【开发工具
    【开发工具
    【Android
    【Android
    【JavaEE】之MyBatis查询缓存
    【JavaEE】之MyBatis逆向工程的使用
    新的起点 Entry KINGSOFT
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3320153.html
Copyright © 2011-2022 走看看