Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.IO;
- public partial class LAB1_SUDOKU : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- }
- protected void Button1_Click(object sender, EventArgs e)
- {
- Sudoku sudoku = new Sudoku();
- int[] x = new int[36]; // eilutės koordinatė
- int[] y = new int[36]; // stulpelio koordinatė
- int kiekt = 0; // kiek yra tuščių langelių
- Skaitymas(sudoku);
- VietuRadimas(sudoku, x, y, ref kiekt);
- PildytiLangelius(sudoku, x, y, ref kiekt);
- for (int i = 0; i < 6; i++)
- {
- TableRow Row = new TableRow();
- for (int j = 0; j < 6; j++)
- {
- TableCell Cell = new TableCell();
- Cell.Text = Convert.ToString(sudoku.Langelis[i, j]);
- Row.Cells.Add(Cell);
- }
- Table1.Rows.Add(Row);
- }
- }
- // Duomenų nuskaitymo metodas
- static void Skaitymas(Sudoku sudoku)
- {
- using (StreamReader input = new StreamReader(HttpContext.Current.Server.MapPath("/App_Data/U3.txt")))
- {
- for (int i = 0; i < 6; i++)
- {
- var reiksmes = (input.ReadLine().Split(' '));
- for (int j = 0; j < 6; j++)
- {
- sudoku.Langelis[i, j] = int.Parse(reiksmes[j]);
- }
- }
- }
- }
- static void Isvedimas(Sudoku sudoku)
- {
- int[] x = new int[36]; // eilutės koordinatė
- int[] y = new int[36]; // stulpelio koordinatė
- int kiekt = 0; // kiek yra tuščių langelių
- for (int i = 0; i < 6; i++)
- {
- for (int j = 0; j < 6; j++)
- Console.Write(sudoku.Langelis[i, j] + " ");
- Console.WriteLine();
- }
- Console.WriteLine("------------------------------");
- PildytiLangelius(sudoku, x, y, ref kiekt);
- for (int i = 0; i < 6; i++)
- {
- for (int j = 0; j < 6; j++)
- Console.Write(sudoku.Langelis[i, j] + " ");
- Console.WriteLine();
- }
- }
- // Metodas, randantis, kuriose x ir y ašyse yra tušti langeliai
- static void VietuRadimas(Sudoku sudoku, int[] x, int[] y, ref int kiekt)
- {
- for (int i = 0; i < 6; i++)
- {
- for (int j = 0; j < 6; j++)
- {
- if (sudoku.Langelis[i, j] == 0)
- {
- x[kiekt] = i;
- y[kiekt] = j;
- kiekt++;
- }
- }
- }
- }
- // Tuščių langelių pildymo metodas
- static void PildytiLangelius(Sudoku sudoku, int[] x, int[] y, ref int kiekt)
- {
- if (kiekt != 0)
- {
- for (int i = 0; i < 6; i++)
- {
- for (int j = 0; j < 6; j++)
- {
- if (sudoku.Langelis[i, j] == 0)
- {
- int indeksas = 0;
- if (TikrintiStulpeli(sudoku, j) == 1)
- {
- int skaicius = 0;
- for (int sk = 1; sk <= 6; sk++)
- if (skaicius == 0)
- {
- int k;
- for (k = 0; k < 6; k++)
- if (sudoku.Langelis[k, j] == sk)
- break;
- if (k == 6)
- {
- skaicius = sk;
- break;
- }
- }
- sudoku.Langelis[i, j] = skaicius;
- kiekt--;
- }
- else if (TikrintiEilute(sudoku, i) == 1)
- {
- int skaicius = 0;
- for (int sk = 1; sk < 7; sk++)
- if (skaicius == 0)
- {
- int k;
- for (k = 0; k < 6; k++)
- if (sudoku.Langelis[i, k] == sk)
- break;
- if (k == 6)
- {
- skaicius = sk;
- break;
- }
- }
- sudoku.Langelis[i, j] = skaicius;
- kiekt--;
- }
- else if (BlokoNumerioPaieska(sudoku, i, j, ref indeksas) == 1)
- {
- sudoku.Langelis[i, j] = RastiBlokoSkaiciu(sudoku, indeksas);
- kiekt--;
- }
- }
- }
- }
- PildytiLangelius(sudoku, x, y, ref kiekt);
- }
- }
- // Stulpelio tuščių vietų patikrinimo metodas
- static int TikrintiStulpeli(Sudoku sudoku, int k)
- {
- int kiek = 0;
- for (int i = 0; i < 6; i++)
- {
- if (sudoku.Langelis[i, k] == 0)
- {
- kiek++;
- }
- }
- return kiek;
- }
- // Eilutės tuščių vietų patikrinimo metodas
- static int TikrintiEilute(Sudoku sudoku, int k)
- {
- int kiek = 0;
- for (int i = 0; i < 6; i++)
- {
- if (sudoku.Langelis[k, i] == 0)
- {
- kiek++;
- }
- }
- return kiek;
- }
- // Metodas, randantis bloką, kuriame yra tuščias langelis
- static int BlokoNumerioPaieska(Sudoku sudoku, int x, int y, ref int indeksas)
- {
- int[,] blokas0 = { { 0, 0 }, { 0, 1 }, { 0, 2 }, { 1, 0 }, { 1, 1 }, { 1, 2 } };
- int[,] blokas1 = { { 0, 3 }, { 0, 4 }, { 0, 5 }, { 1, 3 }, { 1, 4 }, { 1, 5 } };
- int[,] blokas2 = { { 2, 0 }, { 2, 1 }, { 2, 2 }, { 3, 0 }, { 3, 1 }, { 3, 2 } };
- int[,] blokas3 = { { 2, 3 }, { 2, 4 }, { 2, 5 }, { 3, 3 }, { 3, 4 }, { 3, 5 } };
- int[,] blokas4 = { { 4, 0 }, { 4, 1 }, { 4, 2 }, { 5, 0 }, { 5, 1 }, { 5, 2 } };
- int[,] blokas5 = { { 4, 3 }, { 4, 4 }, { 4, 5 }, { 5, 3 }, { 5, 4 }, { 5, 5 } };
- // Randa, kuriam bloke randasi reiksmė
- for (int i = 0; i < 6; i++)
- {
- if (BlokoPaieska(sudoku, x, y, blokas0))
- indeksas = 0;
- else if (BlokoPaieska(sudoku, x, y, blokas1))
- indeksas = 1;
- else if (BlokoPaieska(sudoku, x, y, blokas2))
- indeksas = 2;
- else if (BlokoPaieska(sudoku, x, y, blokas3))
- indeksas = 3;
- else if (BlokoPaieska(sudoku, x, y, blokas4))
- indeksas = 4;
- else
- indeksas = 5;
- }
- if (indeksas == 0)
- return BlokoNuliuTikrinimas(sudoku, blokas0);
- else if (indeksas == 1)
- return BlokoNuliuTikrinimas(sudoku, blokas1);
- else if (indeksas == 2)
- return BlokoNuliuTikrinimas(sudoku, blokas2);
- else if (indeksas == 3)
- return BlokoNuliuTikrinimas(sudoku, blokas3);
- else if (indeksas == 4)
- return BlokoNuliuTikrinimas(sudoku, blokas4);
- else
- return BlokoNuliuTikrinimas(sudoku, blokas5);
- }
- // Metodas, identifikuojantis tuščią langelį bloke
- static bool BlokoPaieska(Sudoku sudoku, int x, int y, int[,] blokas)
- {
- for (int i = 0; i < 6; i++)
- if (x == blokas[i, 0] && y == blokas[i, 1])
- return true;
- return false;
- }
- static int BlokoNuliuTikrinimas(Sudoku sudoku, int[,] blokas)
- {
- int kiekis = 0;
- for (int i = 0; i < 6; i++)
- if (sudoku.Langelis[blokas[i, 0], blokas[i, 1]] == 0)
- kiekis++;
- return kiekis;
- }
- // Metodas, randantis, kokios reikšmės trūksta bloke
- static int RastiBlokoSkaiciu(Sudoku sudoku, int indeksas)
- {
- // skirstymas į 6 blokus, priskiriamos atitinkamos koordinatės
- int[,] blokas0 = { { 0, 0 }, { 0, 1 }, { 0, 2 }, { 1, 0 }, { 1, 1 }, { 1, 2 } };
- int[,] blokas1 = { { 0, 3 }, { 0, 4 }, { 0, 5 }, { 1, 3 }, { 1, 4 }, { 1, 5 } };
- int[,] blokas2 = { { 2, 0 }, { 2, 1 }, { 2, 2 }, { 3, 0 }, { 3, 1 }, { 3, 2 } };
- int[,] blokas3 = { { 2, 3 }, { 2, 4 }, { 2, 5 }, { 3, 3 }, { 3, 4 }, { 3, 5 } };
- int[,] blokas4 = { { 4, 0 }, { 4, 1 }, { 4, 2 }, { 5, 0 }, { 5, 1 }, { 5, 2 } };
- int[,] blokas5 = { { 4, 3 }, { 4, 4 }, { 4, 5 }, { 5, 3 }, { 5, 4 }, { 5, 5 } };
- if (indeksas == 0)
- {
- for (int sk = 1; sk < 7; sk++)
- {
- int k;
- for (k = 0; k < 6; k++)
- if (sudoku.Langelis[blokas0[k, 0], blokas0[k, 1]] == sk)
- break;
- if (k == 6)
- return sk;
- }
- }
- else if (indeksas == 1)
- {
- for (int sk = 1; sk < 7; sk++)
- {
- int k;
- for (k = 0; k < 6; k++)
- if (sudoku.Langelis[blokas1[k, 0], blokas1[k, 1]] == sk)
- break;
- if (k == 6)
- return sk;
- }
- }
- else if (indeksas == 2)
- {
- for (int sk = 1; sk < 7; sk++)
- {
- int k;
- for (k = 0; k < 6; k++)
- if (sudoku.Langelis[blokas2[k, 0], blokas2[k, 1]] == sk)
- break;
- if (k == 6)
- return sk;
- }
- }
- else if (indeksas == 3)
- {
- for (int sk = 1; sk < 7; sk++)
- {
- int k;
- for (k = 0; k < 6; k++)
- if (sudoku.Langelis[blokas3[k, 0], blokas3[k, 1]] == sk)
- break;
- if (k == 6)
- return sk;
- }
- }
- else if (indeksas == 4)
- {
- for (int sk = 1; sk < 7; sk++)
- {
- int k;
- for (k = 0; k < 6; k++)
- if (sudoku.Langelis[blokas4[k, 0], blokas4[k, 1]] == sk)
- break;
- if (k == 6)
- return sk;
- }
- }
- else
- {
- for (int sk = 1; sk < 7; sk++)
- {
- int k;
- for (k = 0; k < 6; k++)
- if (sudoku.Langelis[blokas5[k, 0], blokas5[k, 1]] == sk)
- break;
- if (k == 6)
- return sk;
- }
- }
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement