字节跳动笔试题-求数组中1组成的区块个数c#实现

    xiaoxiao2023-11-20  161

    1.题目描述:

    2.题目理解:

    注:此代码仅用了如下用例进行测试,并不能保证题目的完整解答,仅供交流学习使用,若有错误或改进之处希望在评论区留言,相互交流,共同进步!

    3.c#语言实现:

    using System; using System.Collections; using System.Collections.Generic; using System.Text; namespace bytedance { class jiaobiao { int i, j; public jiaobiao(int i1, int j1) { i = i1; j = j1; } public int geti() { return i; } public int getj() { return j; } } class Program { static bool haverelation(int i1, int j1, int i2, int j2) { if ((i1 - 1 == i2 && j1 - 1 == j2) || (i1 - 1 == i2 && j1 == j2) || (i1 - 1 == i2 && j1 + 1 == j2) || (i1 == i2 && j1 - 1 == j2) || (i1 == i2 && j1 + 1 == j2) || (i1 + 1 == i2 && j1 - 1 == j2) || (i1 + 1 == i2 && j1 == j2) || (i1 + 1 == i2 && j1 + 1 == j2)) { return true; } else return false; } static void Main(string[] args) { string s; s = Console.ReadLine(); int n = int.Parse(s.Split(' ')[0]); int m = int.Parse(s.Split(' ')[1]); int[,] a = new int[n, m]; for (int i = 0; i < n; i++) { string[] b = new string[m]; b = Console.ReadLine().Split(' '); for (int j = 0; j < m; j++) { a[i, j] = int.Parse(b[j]); } } List<jiaobiao> arr1 = new List<jiaobiao>(); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (a[i, j] == 1) { arr1.Add(new jiaobiao(i, j)); } } } List<int>[] arr2 = new List<int>[arr1.Count]; for (int i = 0; i < arr2.Length; i++) { arr2[i] = new List<int>(); } for (int i = 0; i < arr1.Count; i++) for (int j = 0; j < arr1.Count; j++) { if (i != j && haverelation(arr1[i].geti(), arr1[i].getj(), arr1[j].geti(), arr1[j].getj())) { arr2[i].Add(j); } } Console.WriteLine("连接关系"); for (int i = 0; i < arr2.Length; i++) { for (int j = 0; j < arr2[i].Count; j++) Console.Write(arr2[i][j] + " "); Console.Write("\n"); } bool[] state = new bool[arr2.Length]; for (int i = 0; i < state.Length; i++) state[i] = true; int count = 0; for (int i = 0; (i < arr2.Length); i++) { if (state[i] == true) { count++; dfs(arr2,state,i); } } } Console.WriteLine(count); } static void dfs( List<int>[] arr, bool[] state,int index) { if (state[index]) for (int i = 0; i < arr[index].Count; i++) { state[index] = false; { dfs(arr, state, arr[index][i]); } } } } }

    测试程序: 用例输入1:

    3 5 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0

    用例输入2:

    4 5 1 1 0 1 0 1 0 0 1 1 1 1 1 0 0 0 0 0 0 1

    用例输入3:

    4 5 1 1 0 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 1

    用例输入4:

    5 10 1 0 1 0 1 0 0 0 1 1 0 0 0 1 1 1 0 1 0 0 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0 1 0 0 0 1 1 1 0 0 0 1 0 0 1 1
    最新回复(0)