示例#1
0
文件: sudoku.c 项目: rnhmjoj/Sudoku
/*
 * Restituisce due numeri casuali diversi
 */
int *randomd(){
	int *r = (int *)malloc(2 * sizeof(int));
	do{
		r[0] = randomr(1,9); 
		r[1] = randomr(1,9);
	}while(r[0] == r[1]);
	return r;
}
示例#2
0
文件: sudoku.c 项目: rnhmjoj/Sudoku
/*
 * Restituisce un numero casuale nell'intervallo [min, max)
 */ 
int randomr(int min, int max){
	int base = rand(); 
	int intervallo = max - min;
	if (RAND_MAX == base)
		return randomr(min, max);
	if (base < RAND_MAX - (RAND_MAX % intervallo))
		return min + base / (RAND_MAX / intervallo);
	else
		return randomr(min, max);
}
示例#3
0
文件: rand.c 项目: pfac/CPD-AMN
unsigned long randomul_lim (unsigned long min ,unsigned long max) {
	real f = randomr();
	return f * ( max - min + 1 ) + min;
}
示例#4
0
文件: sudoku.c 项目: rnhmjoj/Sudoku
/*
 * Inizializza la tabella del sudoku
 * generando uno schema
 */
void inizializza(int spazi){
	int base[n][n] = {\
		{6,9,7,1,4,3,8,2,5},\
		{4,1,8,9,2,5,6,3,7},\
		{2,5,3,8,7,6,4,9,1},\
		{7,3,2,4,6,8,5,1,9},\
		{8,4,9,3,5,1,7,6,2},\
		{5,6,1,2,9,7,3,8,4},\
		{3,8,4,7,1,9,2,5,6},\
		{1,2,6,5,3,4,9,7,8},\
		{9,7,5,6,8,2,1,4,3}\
	};
	int sostituzioni[9];

	/* genera uno schema
	 * facendo delle sostituzione 
	 * in uno di partenza.
	 */

	for(int l=0; l<25; l++){
		int *r; 

		//scambia riga
		r = randomd();
		for(int i=0; i<n; i++){
			for(int k=0; k<n; k++)
				sostituzioni[k] = base[i][k];
			for(int s=0; s<9; s++)
				if (sostituzioni[s] == r[0])
					sostituzioni[s] = r[1];
				else if (sostituzioni[s] == r[1])
					sostituzioni[s] = r[0];
			for(int p=0; p<9; p++)
        		for(int q=0; q<9; q++)
                	base[i][q] = sostituzioni[q];
		}

		//scambia colonna
		r = randomd();
		for(int i=0; i<n; i++){
			for(int k=0; k<n; k++)
				sostituzioni[k] = base[i][k];
			for(int s=0; s<9; s++)
				if (sostituzioni[s] == r[0])
					sostituzioni[s] = r[1];
				else if (sostituzioni[s] == r[1])
					sostituzioni[s] = r[0];
			for(int p=0; p<9; p++)
				for(int q=0; q<9; q++)
					base[q][i] = sostituzioni[q];
		}

	}

	for(int l=0; l<25; l++){
		int r = randomr(0,3);
		switch(r){
			
			//colonna centrale fissa
			case 0:{
				for(int i=0; i<9; i++){
					for(int k=0; k<9; k++)
                    	sostituzioni[k] = base[i][k];
					for(int j=0; j<9; j++)
						if(j != 4)
                        	base[i][j] = sostituzioni[8-j] ;
				}
				break;
			}

			//riga centrale fissa
			case 1:{
				for(int k=0; k<9; k++){
					for(int i=0; i<9; i++)
        	            sostituzioni[i] = base[i][k];
					for(int j=0; j<9; j++)
						if(j!=4)
							base[j][k] = sostituzioni[8-j];
				}
				break;
			}
			
			//inversione riga 3-5
			case 2:{
				for(int i=0; i<9; i++)
					scambia(&base[3][i], &base[5][i]);
				break;
			}
		}
	}
	
	//inserisci gli spazi
	for(int i=0; i<spazi; i++){
        int unico = 0; //la casella è valida
		do{
			int x = randomr(0,9);
			int y = randomr(0,9);			
			if(!base[x][x])
				unico = 1;			
			else {
				base[x][y] = 0;
				unico = 0;
			}
		}while(unico == 1);
    }

	//copia lo schema generato nella matrice
	for(int i=0; i<n; i++)
		for(int k=0; k<n; k++){
			sudoku[i][k][0] = base[i][k];
			if(!base[i][k])
				sudoku[i][k][1] = 1;
		}
}