题目如下:
题目是这样的,判断一个图是不是连通图。
一个矩阵里边只有0和1组成。如果矩阵里,1周围的8个位置,还有1,那么这2个1就算联通的。如果这个图里所有的1都能互相联通那么,就这个矩阵就是联通的,否则就是不联通的。
用算法判断一个矩阵是不是联通的。
代码如下:
class Matrix
{
public int[,] createMatrix(int m, int n)
{
Random rd = new Random();
int[,] matrix = new int[m, n];
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
matrix[i, j] = rd.Next(0, 2);
}
}
return matrix;
}
public List<int[]> searchElementsOut(int[,] matrix)
{
List<int[]> elements = new List<int[]>();
for (int i = 0; i < matrix.GetLength(0); i++)
{
for (int j = 0; j < matrix.GetLength(1); j++)
{
if (matrix[i, j] == 1)
{
int[] ele = new int[2];
ele[0] = i;
ele[1] = j;
elements.Add(ele);
}
}
}
return elements;
}
public List<int[]> searchElementLink(int[,] matrix, int Em, int En)
{
List<int[]> elements = new List<int[]>();
if (Em == 0 && En == 0)
{
if (matrix[Em + 1, En] == 1)
{
int[] temp = { Em + 1, En };
elements.Add(temp);
}
if (matrix[Em, En + 1] == 1)
{
int[] temp = { Em, En + 1 };
elements.Add(temp);
}
if (matrix[Em + 1, En + 1] == 1)
{
int[] temp = { Em + 1, En + 1 };
elements.Add(temp);
}
}
else if (Em == 0 && En > 0 && En < matrix.GetLength(1) - 1)
{
if (matrix[Em, En - 1] == 1)
{
int[] temp = { Em, En - 1 };
elements.Add(temp);
}
if (matrix[Em, En + 1] == 1)
{
int[] temp = { Em, En + 1 };
elements.Add(temp);
}
if (matrix[Em + 1, En - 1] == 1)
{
int[] temp = { Em + 1, En - 1 };