J'ai été en train de tourner mes roues pendant un certain temps à essayer de comprendre cela, mais n'a pas pu. J'espère que vous pouvez aider!Parse fichier texte dans C - Passer les lignes - Calcul répété
Je travaille actuellement sur un programme qui permet de résoudre Sudoku. Le code actuel que je montre ci-dessous prend en entrée une grille d'entiers 9x9 (le puzzle du Sudoku) et génère ensuite une solution. Cela fonctionne bien.
#include <stdio.h>
int isAvailable(int puzzle[][9], int row, int col, int num)
{
int rowStart = (row/3) * 3;
int colStart = (col/3) * 3;
int i, j;
for(i=0; i<9; ++i)
{
if (puzzle[row][i] == num) return 0;
if (puzzle[i][col] == num) return 0;
if (puzzle[rowStart + (i%3)][colStart + (i/3)] == num) return 0;
}
return 1;
}
int fillSudoku(int puzzle[][9], int row, int col)
{
int i;
if(row<9 && col<9)
{
if(puzzle[row][col] != 0)
{
if((col+1)<9) return fillSudoku(puzzle, row, col+1);
else if((row+1)<9) return fillSudoku(puzzle, row+1, 0);
else return 1;
}
else
{
for(i=0; i<9; ++i)
{
if(isAvailable(puzzle, row, col, i+1))
{
puzzle[row][col] = i+1;
if((col+1)<9)
{
if(fillSudoku(puzzle, row, col +1)) return 1;
else puzzle[row][col] = 0;
}
else if((row+1)<9)
{
if(fillSudoku(puzzle, row+1, 0)) return 1;
else puzzle[row][col] = 0;
}
else return 1;
}
}
}
return 0;
}
else return 1;
}
int main()
{
int i, j;
int row,column;
int puzzle[9][9];
//printf("Enter your input:\n");
for (row=0; row <9; row++){
for(column = 0; column <9; column ++){
scanf("%d",&puzzle[row][column]);
}
}
//PRINT INPUT PUZZLE
printf("Original Puzzle:");
printf("\n+-----+-----+-----+\n");
for(i=1; i<10; ++i)
{
for(j=1; j<10; ++j) printf("|%d", puzzle[i-1][j-1]);
printf("|\n");
if (i%3 == 0) printf("+-----+-----+-----+\n");
}
printf("\n");
//PRINT OUTPUT PUZZLE
printf("Solved Puzzle:");
if(fillSudoku(puzzle, 0, 0))
{
printf("\n+-----+-----+-----+\n");
for(i=1; i<10; ++i)
{
for(j=1; j<10; ++j) printf("|%d", puzzle[i-1][j-1]);
printf("|\n");
if (i%3 == 0) printf("+-----+-----+-----+\n");
}
printf("\n");
}
else printf("\n\nNO SOLUTION\n\n");
return 0;
}
Je veux maintenant utiliser un fichier texte à partir du projet Euler (https://projecteuler.net/project/resources/p096_sudoku.txt) et que mon programme génère tous les 50 de ces solutions. Le fichier texte a le format suivant:
Grid 01
003020600
900305001
001806400
008102900
700000008
006708200
002609500
800203009
005010300
Grid 02
200080300
060070084
030500209
000105408
000000000
402706000
301007040
720040060
004010003
...
et ainsi de suite pour 50 grilles totales.
Ma question est: Quelle est la meilleure façon d'analyser dans ce fichier
- Passer sur la « Grille ## » ligne
- Lire dans les 9 lignes suivantes pour l'entrée
- Continuer sur le fichier pour répéter le programme jusqu'à la fin du fichier
EDIT: Entre les étapes 2 & 3, c'est ce qui se passerait: Après avoir lu dans 9 lignes de nombres, je vais l'utiliser comme entrée pour le programme et exécuter le programme et générer une solution, puis revenir au fichier d'entrée et obtenir le prochain ensemble de nombres et exécuter une autre itération de le programme.
Merci pour toute entrée et les conseils que vous pouvez me fournir! -Colton
Sudoku utilise généralement des * nombres * comme symboles, tandis que le séparateur semble commencer par un caractère. Je recommanderais 'isalpha()' et 'isdigit()'. – EOF
@EOF: Mais si le fichier a un format fixe/régulier (comme cela semble), ce que OP propose sera bien. –
@ScottHunter: L'approche pour résoudre ce problème me semble assez claire. Ce dont je ne suis pas sûr, c'est un moyen simple d'analyser ce fichier au format fixe pour obtenir les entrées dont j'ai besoin pour le programme à chaque itération. –