zoukankan      html  css  js  c++  java
  • 找朋友

    试题描述

    老师要去统计班里的人际情况。

    班里共有n名同学,编号从1到n。班上共有m对朋友。

    现在,老师希望快速地知道,每名同学都有哪些朋友。

    输入
    输入的第一行包含两个整数n, m。
    接下来m行,每行2个正整数编号,表示这两名同学是朋友。
    输出
    输出共n行,第i行的格式为:Friends of i : i所有朋友的编号。注意后输入的朋友先输出,详见样例。
    输入示例
    6 5
    1 2
    1 6
    4 5
    1 4
    5 6
    输出示例
    Friends of 1 : 4 6 2
    Friends of 2 : 1
    Friends of 3 :
    Friends of 4 : 1 5
    Friends of 5 : 6 4
    Friends of 6 : 5 1
    其他说明
    对于40%的数据,n<=1000;
    对于100%的数据,n<=100000,m<=200000。
     

    这道题用了:邻接表。

    head 1 2 3 4 5
    初始化 -1 -1 -1 -1 -1
      0     2  
      1        
      3        
    map 0 1 2 3 4
    x 1 1 4 1 5
    y 2 6 5 4 6
    next -1 0 -1 1 -1

    为了助于理解,此处给出一组模拟过程:

    从2号点出发→map[5],next=3→map[3],next=1→map[1],next=-1;模拟结束

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 struct Edge   //结构体 
     6 {
     7     int x,y,next;
     8 }map[401010];  //由于是无向图,所以范围要 ×2 
     9 
    10 int head[101010];
    11 
    12 void add_edge(int i,int x,int y)
    13 {
    14     map[i].x=x;
    15     map[i].y=y;
    16     map[i].next=head[x];
    17     head[x]=i;
    18 }
    19 
    20 int main()
    21 {
    22     int n,m;
    23     scanf("%d%d",&n,&m);
    24     for(int i=1;i<=n;i++) head[i]=-1;   //全部初始化为-1,方便后面找终点 
    25     for(int i=0;i<m;i++)
    26     {
    27         int x,y;
    28         scanf("%d%d",&x,&y);
    29         add_edge(2*i,x,y);   //如果只写一个,建的是有向图
    30         add_edge(2*i+1,y,x);   //为了不让后面的覆盖前面的,i的位置不能相同 
    31     }
    32     for(int i=1;i<=n;i++)
    33     { 
    34         cout<<"Friends of "<<i<<" :";
    35         for(int j=head[i];j!=-1/*没到头*/;j=map[j].next/*找下一个点*/)   //遍历这个点的所有边,图论中常用!
    36             cout<<" "<<map[j].y;
    37         cout<<endl;
    38     } 
    39     //system("pause");
    40     return 0;
    41 }
    找朋友
  • 相关阅读:
    关于android 代码生成布局中遇到的一些问题
    关于选择移动开发平台(android,ios,wp7)的一些看法
    如何成为一个C++高级程序员(转帖)
    最新Windows平台下Android源码的下载(转+原)
    峨眉之巅放歌
    孝感人间
    迁芸(帮客户名字作诗)
    载春
    杨美花(帮客户名字作诗)
    人生几度温泉夜
  • 原文地址:https://www.cnblogs.com/YXY-1211/p/5703490.html
Copyright © 2011-2022 走看看