using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.Threading; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); Grid.RowCount = 10; Grid.AllowUserToAddRows = false; //чтение из файла var names = new List(); string[] lines = File.ReadAllLines(@"E:/table.txt", Encoding.Default); for (int i = 0; i < 9; i++) { string[] array = lines[i].Split(';'); for (int n = 0; n < 9;n++ ) { Grid[n, i].Value = array[n]; } } } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { } private void HorBtn_Click(object sender, EventArgs e) { int i, j; int[,] vgrid = new int[9, 9];//создание массива int[,] oldgrid = new int[9, 9];//создание старого массива int change = 1; for (i = 0; i < 9; ++i)//запись из таблицы в массив for (j = 0; j < 9; ++j) if (Grid.Rows[i].Cells[j].Value!="") vgrid[i, j]=Convert.ToInt32(Grid.Rows[i].Cells[j].Value); // while (change != 0)//цикл редактирования // { for (i = 0; i < 9; ++i)//запись из нового массива в старый for (j = 0; j < 9; ++j) oldgrid[i, j] = vgrid[i, j]; //начинаем редактирование for (i = 0; i < 9; ++i) //горизонтальный прогон { int recx = 0; int recy = 0; int zeros = 0; int sum = 0; for (j = 0; j < 9; ++j) { sum = sum + vgrid[i, j]; if (vgrid[i, j] == 0) { zeros++; recx = i; recy = j; } } if (zeros == 1) { vgrid[recx, recy] = 45 - sum; } } ////////////////////////////////////////////////// for (i = 0; i < 9; ++i) //вертикальный прогон { int recx = 0; int recy = 0; int zeros = 0; int sum = 0; for (j = 0; j < 9; ++j) { sum = sum + vgrid[j, i]; if (vgrid[j, i] == 0) { zeros++; recx = j; recy = i; } } if (zeros == 1) { vgrid[recx, recy] = 45 - sum; } } ///////////////////////////////////// for (int x = 0; x < 3; x++)//прогон блока for (int y = 0; y < 3; y++) { int recx = 0; int recy = 0; int zeros = 0; int sum = 0; for (i = 3 * x; i < 3 + 3 * x; ++i) //горизонтальный прогон { for (j = 3 * y; j < 3 + 3 * y; ++j) { sum = sum + vgrid[i, j]; if (vgrid[i, j] == 0) { zeros++; recx = i; recy = j; } } } if (zeros == 1) { vgrid[recx, recy] = 45 - sum; } } //метод исключения for (int x = 0; x < 3; x++)//прогон блока for (int y = 0; y < 3; y++) { int zeros = 0; int[] xblank = new int[10]; //х-координата пустой клетки int[] yblank = new int[10]; //у-координата пустой клетки bool[] available = new bool[10]; //доступность пустой клетки bool[] used = new bool[10]; //использованность пустой клетки другим числом bool present = false; int possibleblanks = 0; for(int a = 1; a<=9; a++) { available[a]=false; used[a]=false; } for (i = 3 * x; i < 3 + 3 * x; ++i) //Сколько нулей, сука? { for (j = 3 * y; j < 3 + 3 * y; ++j) if (vgrid[i, j] == 0) { zeros++; xblank[zeros]=i; yblank[zeros] = j; available[zeros]=true; } } //Каких цифр не хватает? for(int n = 1; n<=9;n++) { present = false; possibleblanks = 0; for(int a = 1; a<=9; a++) { available[a]=true; } for (i = 3 * x; i < 3 + 3 * x; ++i) { for (j = 3 * y; j < 3 + 3 * y; ++j) if (vgrid[i, j] == n) { present = true; } } if(present==false)//если такой цифры нет, смотрим, можно ли подставить { for (int blankcount = 1; blankcount <= zeros; blankcount++) { if (used[blankcount] == false)//если пустая клетка не использована { for (int a = 0; a < 9; a++)//перекрестная проверка конфликта { if (vgrid[a, yblank[blankcount]] == n) { available[blankcount] = false; } if (vgrid[xblank[blankcount], a] == n) { available[blankcount] = false; } } } } for(int a = 1; a<=zeros; a++)//считаем колво возможных клеток { if((available[a]==true)&&(used[a]==false)) possibleblanks++; } if(possibleblanks==1) for(int a = 1; a<=9; a++) { if((available[a]==true)&&(used[a]==false)) { vgrid[xblank[a], yblank[a]] = n; used[a] = true; } } } } } //заканчиваем редактирование change = 0; for (i = 0; i < 9; ++i) //проверяем массив на новизну for (j = 0; j < 9; ++j) { change = change + vgrid[i, j] - oldgrid[i, j]; } //} //конец редактирования for (i = 0; i < 9; ++i) //запись массива в таблицу for (j = 0; j < 9; ++j) Grid.Rows[i].Cells[j].Value = vgrid[i, j]; } private void VertBtn_Click(object sender, EventArgs e) { var names = new List(); string[] lines = File.ReadAllLines(@"E:/table.txt", Encoding.Default); for (int i = 0; i < 9; i++) { string[] array = lines[i].Split(';'); for (int n = 0; n < 9; n++) { Grid[n, i].Value = array[n]; } } } } }