Я хотел посчитать число 0 и 1 из 2d-массива с алгоритмом наводнения. Но, к сожалению, это показывает неправильный результат.кол-во 0 с алгоритмом floodfill
У меня есть матрица, как этот
0,1,1,0,1
1,0,1,1,0
1,0,1,1,0
1,0,1,1,0
1,0,1,1,0
Предполагалось, чтобы показать число 0 = 10 и 1 = 15
но показывающий число 0 = 4 и 1 = 21
вот мой код
int[][] input;
public static int[,] reult;
public static int count = 0,col,row;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string path;
OpenFileDialog file = new OpenFileDialog();
if (file.ShowDialog() == DialogResult.OK)
{
input = File.ReadLines(file.FileName)
.Skip(0)
.Select(l => l.Split(',')
.Select(n => int.Parse(n))
.ToArray())
.ToArray();
}
reult = JaggedToMultidimensional(input);
int p = reult.GetLength(0);
int q = reult.GetLength(1);
row = p-1;
col = q - 1;
int one = p * q;
int zero = apply(row, col);
label1.Text = "" + zero;
label2.Text = "" + (one - zero);
}
public T[,] JaggedToMultidimensional<T>(T[][] jaggedArray)
{
int rows = jaggedArray.Length;
int cols = jaggedArray.Max(subArray => subArray.Length);
T[,] array = new T[rows, cols];
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
array[i, j] = jaggedArray[i][j];
}
}
return array;
}
private static int apply(int x, int y)
{
int currentColor = getValueAt(x, y);
if (currentColor == 0)
{
visit(x, y);
count++;
if (x < row) apply(x + 1, y);
if(y<col) apply(x, y + 1);
if(x>0) apply(x - 1, y);
if (y>0) apply(x, y - 1);
}
return count;
}
private static int getValueAt(int x, int y)
{
if (x < 0 || y < 0 || x > row || y > col)
{
return -1;
}
else
{
return reult[x,y];
}
}
private static void visit(int x, int y)
{
reult[x,y] = 1;
}
Это заливка наводнения и, как таковая, она посещает только соседние ячейки, которые находятся в пределах данного параметра (в данном случае 'currentColor == 0'). Вы начинаете в правом нижнем углу, и в группе этой группы есть 4 0. Ваш алгоритм делает именно то, что он должен делать, и вы просто неправильно интерпретируете результат. – Abion47
, так что мне делать? – Dante
Ваша цель использовать заливку залива или считать 1 и 0? – Abion47