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 }
  • 相关阅读:
    保。,net .
    表格单元格内容超出时显示省略号效果
    延迟加载、异步加载
    requestAnimationFrame,Web中写动画的另一种选择
    淡扯javascript编程思想
    简单粗暴地理解js原型链js面向对象编程
    试试写个随笔吧
    全屏遮罩
    事件绑定
    Metro style Apps 开发第一篇
  • 原文地址:https://www.cnblogs.com/LJ-LJ/p/11455415.html
Copyright © 2011-2022 走看看