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 }
  • 相关阅读:
    JS正则手机靓号处理AB ABAB AABB
    url参数中有+、空格、=、%、&、#等特殊符号的问题解决
    LigerUI 使用教程表格篇
    JS获取地址栏参数
    手机端meta
    最大连续子序列 hdu 1231
    I NEED A OFFER! hdu1203(背包)
    Bookshelf 2 poj3628(01背包/DFS)
    Charm Bracelet poj3624(01背包)
    985的方格难题(dp)
  • 原文地址:https://www.cnblogs.com/LJ-LJ/p/11455415.html
Copyright © 2011-2022 走看看