Witamy w Nieoficjalnym polskim support'cie AMX Mod X
Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
|
Guest Message by DevFuse
Wklejka 1yse4tfdp6xww dodana przez K!113r, 29.10.2012 21:39
Sudoku
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115.
#include <stdio.h> #include <conio.h> #include <stdlib.h> typedef struct _ciag { int len; int cyfry[9]; } ciag; int wiersz_brakujace_liczby(int w); int kolumna_brakujace_liczby(int k); int kwadrat_brakujace_liczby(int x, int y); int wybierz_liczbe(int a); int i,x,y; int tablica[9][9]; int wiersze[9]; int kolumny[9]; int kwadraty[3][3]; int czy_wpisal; int main() { printf("Podaj liczby (0 oznacza puste pole)n"); printf("Dziewiec lini po dziewiec liczb)n"); for(i=0;i<9;i++) scanf("%i %i %i %i %i %i %i %i %i", &tablica[i][0], &tablica[i][1], &tablica[i][2], &tablica[i][3], &tablica[i][4], &tablica[i][5], &tablica[i][6], &tablica[i][7], &tablica[i][8]); /* glowny algorytm */ do { /* brakujace liczby w poszczegolnych kolumnach i wierszach*/ for(i=0;i<9;i++) { kolumny[i]=kolumna_brakujace_liczby(i); wiersze[i]=wiersz_brakujace_liczby(i); } /* brakujace liczby w poszczegolnych kwadratach */ for(x=0;x<3;x++) for(y=0;y<3;y++) kwadraty[x][y]=kwadrat_brakujace_liczby(x,y); czy_wpisal = 0; for(x=0;x<9;x++) for(y=0;y<9;y++) if(tablica[x][y]==0) { i = wiersze[x] & kolumny[y] & kwadraty[x/3][y/3]; i = wybierz_liczbe(i); if(i!=0) { tablica[x][y]=i; czy_wpisal=1; } } } while(czy_wpisal!=0); printf("n----------------------------n"); for(x=0;x<9;x++) { for(y=0;y<9;y++) printf("%i ", tablica[x][y]); printf("n"); } system("PAUSE"); return 0; } int wiersz_brakujace_liczby(int w) { int wiersz,i; wiersz=0; for(i=0;i<9;i++) if(tablica[w][i]) { wiersz|=(1 << (tablica[w][i]-1)); } wiersz=~wiersz; wiersz&=511; return wiersz; } int kolumna_brakujace_liczby(int k) { int kolumna,i; kolumna=0; for(i=0;i<9;i++) if(tablica[i][k]) kolumna|=(1 << (tablica[i][k]-1)); kolumna=~kolumna; kolumna&=511; return kolumna; } int kwadrat_brakujace_liczby(int x, int y) { int kwadrat,i,j; kwadrat=0; for(i=x*3;i<x*3+3;i++) for(j=y*3;j<y*3+3;j++) if(tablica[i][j]) kwadrat|=(1 << (tablica[i][j]-1)); kwadrat=~kwadrat; kwadrat&=511; return kwadrat; } int wybierz_liczbe(int a) { int i, ret = -1; for(i=0;i<10;i++) if(a & (1<<i)) if(ret==-1) ret=i; else return 0; return ret+1; }
Dodanych wklejek: 11179
Powered By (Pav32) Pastebin © 2011