zoukankan      html  css  js  c++  java
  • 入门OJ 1278【关系网络】

    描述

    有N个人,编号为1到N,其中有一些人互相认识,现在x想认识y,可以通过他所认识的人来认识更多的人
    如果x认识y,y认识z,则x可以通过y来认识z,求出x最少需要通过多少人才能认识y

    输入输出格式

    输入

    第一行3个整数n,x,y,N<=100,1<=x,y<=N
    接下来是一个N*N的矩阵,a[i,j]=1则说明i认识j,如果为0则不认识
    保证i=j时,a[i,j]=0,且a[i,j]=a[j,i]
    行中每两个数字之间用一个空格分开

    输出

    如题

    输入输出样例

    输入样例1

    5 1 5
    0 1 0 0 0
    1 0 1 1 0
    0 1 0 1 0
    0 1 1 0 1
    0 0 0 1 0

    输出样例1

    2
    

    解题思路

      典型的BFS,直接搜就行了,最后输出时记得减一,因为要到达的人自己不算。

    题解

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n,x,y;
     4 struct node{
     5     int num;//编号 
     6     int t;//步数 
     7     node(){}
     8     node(int sum,int tt)
     9     {
    10         num=sum;
    11         t=tt;
    12     }
    13 };
    14 int mp[101][101];//
    15 bool flag[101];//标记 
    16 queue<node> q;
    17 void bfs()
    18 {
    19     q.push(node(x,0));
    20     flag[x]=true;//打标记 
    21     while(!q.empty())
    22     {
    23         node head=q.front();
    24         q.pop();
    25         if(head.num==y)
    26         {
    27             cout<<head.t-1;//一定要减一 
    28             return;
    29         }
    30         for(int i=1;i<=n;i++)
    31         {
    32             if(mp[head.num][i]&&!flag[i])
    33             {
    34                 flag[i]=true;
    35                 q.push(node(i,head.t+1));
    36             }
    37         }
    38     }
    39 }
    40 int main()
    41 {
    42     cin>>n>>x>>y;
    43     for(int i=1;i<=n;i++)
    44     {
    45         for(int j=1;j<=n;j++)
    46         {
    47             cin>>mp[i][j];//存图 
    48         }
    49     }
    50     bfs();
    51 }
  • 相关阅读:
    spring mvc之DispatcherServlet类分析
    python根据操作系统类型调用特定模块
    C#编写windows服务程序
    写在开始前---多端小系统结构
    写在开始前---web异常处理
    java反射
    写在开始前---简单业务分层
    写在开始前---ajax中的会话过期与重新登录
    一个简易的netty udp服务端
    google的python语言规范
  • 原文地址:https://www.cnblogs.com/hualian/p/11186801.html
Copyright © 2011-2022 走看看