Ejemplo n.º 1
0
/* calculate candidates for each square */
void cand(void) {
	int i = 0, j = 0, k = 0, m = 0;
	short list[N];  short len = 0;	/* list of already taken numbers */
	short root = (short)(sqrt((double)N));

	for (i = 0; i < N; i++) {
		for (j = 0; j < N; j++) {
			/* if the square is empty, compile a candidate list */
			if (puz[i][j] == 0) {
				//printf("working on empty square %d,%d\n", i, j);
				/* traverse row */
				//printf("before row traversal\n");
				for (m = 0; m < N; m++) 
					if (puz[i][m] > 0)
						list[len++] = puz[i][m];
				/* traverse column */
				//printf("after row, before col traversal\n");
				for (k = 0; k < N; k++) 
					if (puz[k][j] > 0)
						len += add_no_dup(list, puz[k][j], len);
				/* traverse current small square */
				//printf("after col, before sqr traversal\n");
				for (k = (i/root)*root; k < ((i/root)*root + root); k++)
					for (m = (j/root)*root; m < ((j/root)*root + root); m++) {
						if (puz[k][m] > 0)
							len += add_no_dup(list, puz[k][m], len);
					}
				/* create candidate list and store in 3-d structure */
				//printf("after sqr, creating cand list\n");
				for (k = 1; k <= N; k++)	
					if (!contains(list, k, len)) {
						puz_can[i][j][puz_can[i][j][0]+1] = k;
						puz_can[i][j][0]++;
					}
				/* fill in space if value is trivial (only one candidate) */
				if (puz_can[i][j][0] == 1)
					puz[i][j] = puz_can[i][j][1];
				/* fill in space if restricted by neighboring rows/cols */
				else if (puz_can[i][j][0] > 1) {
					for (k = 1; k <= puz_can[i][j][0]; k++) {
						if (restr(i, j, puz_can[i][j][k])) {
							puz[i][j] = puz_can[i][j][k];
							break;
						}
					}
				}

				len = 0; /* clear list of already taken numbers*/
			}
		}
	}
}
Ejemplo n.º 2
0
QString KraftDB::mysqlEuroDecode( const QString& str ) const
{
    QChar euro( 0x20ac );
    QString restr( str );
    return restr.replace( EuroTag, euro );
}