Перейти к содержимому

Genezis

Присоединился: 29 янв 2008
Оффлайн Последний вход: окт 23 2013 18:10
-----

Созданные мной темы

Алгоритм генерации рандомной Судоку

03 марта 2013 - 18:55

Требуется помощь в написании алгоритма генерации судоку на java.
В общем, есть 3 метода: checkLine, checkColumn и checkBlock, которые по отдельности работают, т.е заполняют таблицу цифрами от 1 до 9 без повторений либо в строку, в столбец, либо в блок 3х3. Но при объединении каких-либо 2-ух из них программа зацикливается. Как решить это - фиг знает.
Собственно сам код:
package sudoku;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
public class Numbers
{
static final int N = 9;
static Random rnd = new Random();

static List<Integer>[] numbers = new ArrayList[N];

public Numbers()
{
	 for(int i = 0; i < N; i++)
	 {
		 numbers[i] = new ArrayList<>();
		 for(int j = 1; j <= N; j++)
		 {
			 if(i == 0)
			 {
				 numbers[i].add(j);
			 }
			 else
			 {
				 numbers[i].add(0);
			 }
			
		 }
	 }
	 Collections.shuffle(numbers[0]);
}

private boolean checkLine(int line, int value)
{
	 for(int i = 0; i < N; i++)
	 {
		 if(numbers[line].get(i) == value)
		 {
			 return false;
		 }
	 }
	 return true;
}

private boolean checkColumn(int column, int value)
{
	 for(int i = 0; i < N; i++)
	 {
		 if(numbers[i].get(column) == value)
		 {
			 return false;
		 }
	 }
	 return true;
}

private boolean checkMove(int l, int c, int r)
{
	 if(!checkLine(l, r))
	 {
		 return false;
	 }
	 if(!checkColumn(c, r))
	 {
		 return false;
	 }
	 if(!checkBlock(l, c, r))
	 {
		 return false;
	 }
	
	 return true;
}

private boolean checkBlock(int line, int column, int value)
{
	 for(int i = 0; i < 3; i++)
	 {
		 for(int j = 0; j < 3; j++)
		 {
			 if(numbers[line - (line % 3) + i].get(column - (column % 3) + j) == value)
			 {
				 return false;
			 }
		 }
	 }
	 return true;
}

public void generateSudoku()
{
	 boolean move = false;
	 int r = 0;
	
	 for(int line = 1; line < N; line++)
	 {
		 for(int column = 0; column < N; column++)
		 {
			 while(!move)
			 {
				 r = rnd.nextInt(9) + 1;
				 move = checkMove(line, column, r);
				
				
				 for(int i = 0; i < N; i++)
				 {
					 System.out.println(numbers[i].toString());
				 }
				 System.out.println(" ------------------- ");
			 }
			
			 if(move)
			 {
				 numbers[line].set(column, r);
				 move = false;
			 }
		 }
	 }
}

public void printNumbers()
{
	 for(int i = 0; i < N; i++)
	 {
		 System.out.println(numbers[i].toString());
	 }
}
}

Зацикливается примерно в таких местах:
Прикрепленный файл  sud.jpg   88,29К   94 Количество загрузок
В данном случае остаётся в строку вставить только 3, но она уже есть в текущем блоке 3х3. Хочется добить, но самому не по зубам (

Ищу программу для создания DVD

28 октября 2008 - 13:30

Посоветуйте, пожалуйста, прогу для создания полноценного DVD проекта. Нужно наличие возможности не только с работой видео, а с фотографиями, картинками и пр., создания меню и раздела с музыкой.

Ebay.com и PayPal

06 мая 2008 - 20:31

Зарегестрировался, занчит, недавно на Ebay.com выиграл там на аукционе одну вещицу, а заплатить за неё никак не могу. Как понимаю, нужен был PayPal аккаунт, вообщем создал. Единственная проблема у меня карта Visa Electron, которая не содержит CVV-2 кода и как деньги туда перевести без понятия. Кто может сказать какие варианты есть и объяснить что можно сделать? Или нужно идти в банк и просить поменять карту? Поиском восользовался, но ответа на свой вопрос так и не нашёл.

Чипование

18 марта 2008 - 14:41

Где можно поставить чип на PS2 в ида-вирумаа?