Advertisement
Guest User

Untitled

a guest
Dec 11th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.34 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. // wzór na ilość rozwiązan z 3 w linii 4(n-2)(n-1)
  4.  
  5. struct pole
  6. {
  7. int wymiar;
  8. int linia;
  9. int **elementy;
  10. };
  11. typedef struct
  12. {
  13. int x,y;
  14. } kord;
  15.  
  16. typedef struct
  17. {
  18. kord n;
  19. void *nast;
  20. }puste;
  21. puste* dodaj (kord x, puste *glowa);
  22. struct pole odczyt(char* plikk)
  23. {
  24. FILE *plik = fopen(plikk, "r");
  25. struct pole m;
  26. fscanf(plik, "%d %d", &m.wymiar, &m.linia);
  27. m.elementy=calloc(m.wymiar*m.wymiar, sizeof(int*));
  28. for(int i=0; i<m.wymiar; i++)
  29. {
  30. m.elementy[i]=(int*)calloc(m.wymiar, sizeof(int));
  31. }
  32. for(int i = 0; i < m.wymiar; ++i)
  33. for(int j = 0; j < m.wymiar; ++j)
  34. fscanf(plik,"%d", &*(*(m.elementy + i) + j));
  35. fclose(plik);
  36. //for (int i = 0; i < m.wiersze * m.wiersze; i++)
  37. //free(m.elementy);
  38. return m;
  39. }
  40. puste tworz(struct pole m)
  41. {
  42. puste *l = NULL;
  43. for (int i = 0; i < m.wymiar; i++)
  44. {
  45. for (int j = 0; j < m.wymiar; j++)
  46. {
  47. if(m.elementy[i][j]==0)
  48. {
  49. kord zero={.x=i, .y=j};
  50. l=dodaj(zero, l);
  51. }
  52. }
  53. }
  54. return *l;
  55. }
  56. puste* dodaj (kord x, puste *z)
  57. {
  58. puste *ogon = (puste *)calloc (1, sizeof(puste));
  59. ogon->n = x;
  60. ogon->nast = NULL;
  61. if (!z)
  62. return ogon;
  63. puste *glowa = z;
  64. while(z->nast)
  65. z = (puste *)z->nast;
  66. z->nast = ogon;
  67. return glowa;
  68. }
  69.  
  70. puste* zniszczostatni(puste *glowa)
  71. {
  72. puste *ptr = glowa, *poprz = NULL;
  73. for(; ptr && ptr->nast; poprz = ptr)
  74. {
  75. ptr = (puste *)ptr->nast;
  76. }
  77. if (poprz)
  78. poprz->nast = NULL;
  79. free(ptr);
  80. return ptr == glowa ? NULL : glowa;
  81. }
  82.  
  83.  
  84.  
  85.  
  86.  
  87. int check(struct pole m, int a, int i, int j, int b)
  88. {
  89. for(;b<m.linia,i+1!=m.wymiar,j+1!=m.wymiar ;)
  90. {
  91. if (m.elementy[i][j] == a && m.elementy[i + 1][j] == a&&b<m.linia)
  92. {
  93. if(b==m.linia-1)
  94. {
  95. b++;
  96. return a;
  97. break;
  98. }
  99. check(m,a,i+1,j,b+1);
  100. }
  101. if (m.elementy[i][j] == a && m.elementy[i][j+1] == a&&b<m.linia)
  102. {
  103. if(b==m.linia-1)
  104. {
  105. b++;
  106. return a;
  107. break;
  108. }
  109. check(m,a,i,j+1,b+1);
  110. }
  111. if (m.elementy[i][j] == a&&m.elementy[i+1][j+1] == a&&b<m.linia)
  112. {
  113. if(b==m.linia-1)
  114. {
  115. b++;
  116. return a;
  117. break;
  118. }
  119. check(m,a,i+1,j+1,b+1);
  120. }
  121. if (i-1>0&&m.elementy[i][j] == a&&m.elementy[i-1][j+1] == a&&b<m.linia)
  122. {
  123. if(b==m.linia-1)
  124. {
  125. b++;
  126. return a;
  127. break;
  128. }
  129. check(m,a,i-1,j+1,b+1
  130. );
  131. }
  132. else
  133. {
  134. b++;
  135. }
  136. }
  137. if(i<m.linia)
  138. {
  139. return 0;
  140. }
  141. }
  142.  
  143.  
  144.  
  145.  
  146.  
  147. void show(puste *glowa)
  148. {
  149. printf("\n");
  150. puste *p=glowa;
  151. do{
  152. printf("%i%i, ", p->n.x, p->n.y);
  153. p=p->nast;
  154. }while(p!=NULL);
  155. printf("\n");
  156. }
  157.  
  158.  
  159. struct pole tablica(struct pole m);
  160. char znak(int i);
  161. int main()
  162. {
  163. struct pole m=odczyt("save.txt");
  164. puste zera=tworz(m);
  165. show(&zera);
  166. tablica(m);
  167. kord n={.x=1,.y=1};
  168. m.elementy[n.x][n.y]=1;
  169. tablica(m);
  170. if(check(m,1,0,0,1)==1)
  171. {
  172. printf("YOU WON");
  173. }
  174. //zniszczliste(&zera);
  175. return 0;
  176. }
  177.  
  178. struct pole tablica(struct pole m) {
  179. for (int b = 0; b < m.wymiar; b++)
  180. printf(" %4d ", b + 1);
  181. printf("\n");
  182. for (int a = 0; a < m.wymiar; a++)
  183. {
  184. for (int y = 0; y < m.wymiar; y++)
  185. printf(" '%c' |", znak(m.elementy[a][y]));
  186. printf("\t %c \n ", 65 + a);
  187. for (int y = 0; y < m.wymiar; y++)
  188. printf("----+-");
  189. printf("\n");
  190. }
  191. return m;
  192. };
  193.  
  194. char znak(int i)
  195. {
  196. switch (i)
  197. {
  198. case -1:
  199. return 'X';
  200. case 0:
  201. return ' ';
  202. case 1:
  203. return 'O';
  204. }
  205. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement