Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- // wzór na ilość rozwiązan z 3 w linii 4(n-2)(n-1)
- struct pole
- {
- int wymiar;
- int linia;
- int **elementy;
- };
- typedef struct
- {
- int x,y;
- } kord;
- typedef struct
- {
- kord n;
- void *nast;
- }puste;
- puste* dodaj (kord x, puste *glowa);
- struct pole odczyt(char* plikk)
- {
- FILE *plik = fopen(plikk, "r");
- struct pole m;
- fscanf(plik, "%d %d", &m.wymiar, &m.linia);
- m.elementy=calloc(m.wymiar*m.wymiar, sizeof(int*));
- for(int i=0; i<m.wymiar; i++)
- {
- m.elementy[i]=(int*)calloc(m.wymiar, sizeof(int));
- }
- for(int i = 0; i < m.wymiar; ++i)
- for(int j = 0; j < m.wymiar; ++j)
- fscanf(plik,"%d", &*(*(m.elementy + i) + j));
- fclose(plik);
- //for (int i = 0; i < m.wiersze * m.wiersze; i++)
- //free(m.elementy);
- return m;
- }
- puste tworz(struct pole m)
- {
- puste *l = NULL;
- for (int i = 0; i < m.wymiar; i++)
- {
- for (int j = 0; j < m.wymiar; j++)
- {
- if(m.elementy[i][j]==0)
- {
- kord zero={.x=i, .y=j};
- l=dodaj(zero, l);
- }
- }
- }
- return *l;
- }
- puste* dodaj (kord x, puste *z)
- {
- puste *ogon = (puste *)calloc (1, sizeof(puste));
- ogon->n = x;
- ogon->nast = NULL;
- if (!z)
- return ogon;
- puste *glowa = z;
- while(z->nast)
- z = (puste *)z->nast;
- z->nast = ogon;
- return glowa;
- }
- puste* zniszczostatni(puste *glowa)
- {
- puste *ptr = glowa, *poprz = NULL;
- for(; ptr && ptr->nast; poprz = ptr)
- {
- ptr = (puste *)ptr->nast;
- }
- if (poprz)
- poprz->nast = NULL;
- free(ptr);
- return ptr == glowa ? NULL : glowa;
- }
- int check(struct pole m, int a, int i, int j, int b)
- {
- for(;b<m.linia,i+1!=m.wymiar,j+1!=m.wymiar ;)
- {
- if (m.elementy[i][j] == a && m.elementy[i + 1][j] == a&&b<m.linia)
- {
- if(b==m.linia-1)
- {
- b++;
- return a;
- break;
- }
- check(m,a,i+1,j,b+1);
- }
- if (m.elementy[i][j] == a && m.elementy[i][j+1] == a&&b<m.linia)
- {
- if(b==m.linia-1)
- {
- b++;
- return a;
- break;
- }
- check(m,a,i,j+1,b+1);
- }
- if (m.elementy[i][j] == a&&m.elementy[i+1][j+1] == a&&b<m.linia)
- {
- if(b==m.linia-1)
- {
- b++;
- return a;
- break;
- }
- check(m,a,i+1,j+1,b+1);
- }
- if (i-1>0&&m.elementy[i][j] == a&&m.elementy[i-1][j+1] == a&&b<m.linia)
- {
- if(b==m.linia-1)
- {
- b++;
- return a;
- break;
- }
- check(m,a,i-1,j+1,b+1
- );
- }
- else
- {
- b++;
- }
- }
- if(i<m.linia)
- {
- return 0;
- }
- }
- void show(puste *glowa)
- {
- printf("\n");
- puste *p=glowa;
- do{
- printf("%i%i, ", p->n.x, p->n.y);
- p=p->nast;
- }while(p!=NULL);
- printf("\n");
- }
- struct pole tablica(struct pole m);
- char znak(int i);
- int main()
- {
- struct pole m=odczyt("save.txt");
- puste zera=tworz(m);
- show(&zera);
- tablica(m);
- kord n={.x=1,.y=1};
- m.elementy[n.x][n.y]=1;
- tablica(m);
- if(check(m,1,0,0,1)==1)
- {
- printf("YOU WON");
- }
- //zniszczliste(&zera);
- return 0;
- }
- struct pole tablica(struct pole m) {
- for (int b = 0; b < m.wymiar; b++)
- printf(" %4d ", b + 1);
- printf("\n");
- for (int a = 0; a < m.wymiar; a++)
- {
- for (int y = 0; y < m.wymiar; y++)
- printf(" '%c' |", znak(m.elementy[a][y]));
- printf("\t %c \n ", 65 + a);
- for (int y = 0; y < m.wymiar; y++)
- printf("----+-");
- printf("\n");
- }
- return m;
- };
- char znak(int i)
- {
- switch (i)
- {
- case -1:
- return 'X';
- case 0:
- return ' ';
- case 1:
- return 'O';
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement