zoukankan      html  css  js  c++  java
  • 华为笔试:矩阵相邻

    题目描述:

    一个矩阵,5*5,取相邻(二个成员有一个边是相同的)的6个,输入一个6个成员列表,判断是否满足?

    矩阵成员如下:

    [[1,2,3,4,5],

    [11,12,13,14,15],

    [21,22,23,24,25],

    [31,32,33,34,35],

    [41,42,43,44,45]].

    输入描述:

    包含6个矩阵成员数组,如:1,2,3,4,5,11以一个空格分隔,支持多行

    1,2,3,4,5,11

    1,2,11,14,25,15

    输出描述:

    满足输出1,否则输出0,每一行输入一个输出

    1

    0

    备注:

    输入没有合法判断,每个成员不重复。

    思路分析:

    利用并查集实现。设定一个长度为6的数组,其中每个成员单独成组,接下来判断两两是否相邻,若相邻则合并为一组。最后判断是否存在孤立的组,若有则输出0,否则输出1。

    代码:

     1 #include<iostream>
     2 #include<vector>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 vector<int>Tree(6);
     7 int findRoot(int x){
     8     if(Tree[x]==-1) return x;
     9     int tmp=findRoot(Tree[x]);
    10     Tree[x] = tmp;
    11     return tmp;
    12 }
    13 
    14 int main(){
    15     int A[6];
    16     while(cin>>A[0]){
    17         for(int i=1;i<6;i++) cin>>A[i];
    18         for(int i=0;i<6;i++) Tree[i]=-1;
    19         for(int i=0;i<6;i++){
    20             for(int j=i+1;j<6;j++){
    21                 int x=max(A[i],A[j]);
    22                 int y=min(A[i],A[j]);
    23                 if(x-y==1 || x-y==10){
    24                     int a=findRoot(i);
    25                     int b=findRoot(j);
    26                     if(a!=b) Tree[a]=b;
    27                 }
    28             }
    29         }
    30         int ans=count(Tree.begin(),Tree.end(),-1)==1?1:0;
    31         cout<<ans<<endl;
    32     }
    33     return 0;
    34 }
  • 相关阅读:
    HTTP、HTTP2
    1-1 用本地代码调试线上环境代码
    js判断触摸方向
    1-1 node 基础
    1-2 nodejs小节 文件读取
    c++ 递归斐波那契算法及时间复杂度
    十进制转换成二进制以 二进制转换成 8进制和16进制
    centos6.5 安装cmake 3.3.2
    回文字符串
    -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable
  • 原文地址:https://www.cnblogs.com/LJ-LJ/p/11455415.html
Copyright © 2011-2022 走看看