Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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>();
- 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>();
- 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]; }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement