Problem Konika szachowego C

0

Witam,
Pewnie część z was powie ze ten temat juz byl i zeby uzywac opcji szukac. Był podobny ale do c++... Jestem poczatkującym programistą i nie udało mi sie tego skonwertowac na C...
Powiem Od razu w czym rzecz. Mam do napisania ważny projekt na zaliczenie z programowania który jest dla mnie ostatnia deska ratunku...
Oto jego tresc:

Problem konika szachowego
Znaleźć taką drogę aby poruszając się ruchem konika szachowego, odwiedzić wszystkie pola na szachownicy. W każdym polu konik może stanąć tylko raz.
Użytkownik ma mozliwość ustalenia wielkości szachownicy. Program należy napisać przy użyciu listy, na której zapisywana jest historia ruchów konika. Algorytm z powrotami - jeśli z jakiegoś miejsca nie ma możliwych ruchów to wracamy do ruchu poprzedniego i próbujemy skoczyć w inne miejsce, chyba, że w ten sposób wrócimy do pierwszego pola i okaże się, że próbowaliśmy już wszystkie możliwości z tego pola, to uznajemy, że nie ma drogi.
Rozwiązanie problemu należy przedstawić graficznie (na szachownicy) (może być tryb tekstowy).

W sumie mogłbym pokazac kod ktory juz napisalem ale raczej jest to bez sensu bo mi nie działa.
Byłbym naprawde wdzieczny zeby ktokolwiek pomogl mi to napisac...

0
urbi89 napisał(a)

. Mam do napisania ważny projekt na zaliczenie z programowania który jest dla mnie ostatnia deska ratunku...

Nie tylko Ty :) Się tak zastanawiam, skoro jest to dla Ciebie trudne, to po co się pchałeś na takie studia?

urbi89 napisał(a)

W sumie mogłbym pokazac kod ktory juz napisalem

Ano mógłbyś... jeśli chcesz zwiększyć swoje szanse na odpowiedź.

Użyłeś google chociaż? Pierwszy link, ładnie przedstawiony algorytm http://students.mimuw.edu.pl/SR/prace-mgr/masko/node33.html . O, kolejny http://kondel.ko.funpic.de/?pid=50 - tutaj z kolei mamy nawet gotowy kod ...

0

kozystalem czesciowo z tego
http://4programmers.net/Forum/343205#id343205
i z samodzielnego rozkminianai i wyszlo cos takiego

#include<stdio.h>
#include<stdlib.h>
#include<stdio.h>

int skok(int x,int y, int N, int l_ruchow)
{
    if(l_ruchow==N*N)
    return 1;

    printf("%d\n",l_ruchow);
    int t[x][y];
    int i, next_x, next_y;
    int ruch[8][2]={
        {1,2},
        {1,-2},
        {-1,2},
        {-1,-2},
        {2,1},
        {2,-1},
        {-2,1},
        {-2,-1}
                    };
        if (t[x][y]=0){

            t[x][y]=1;
            l_ruchow++;
    for(i=0;i<8;i++){
        next_x = x + ruch[i][0];
        next_y = y + ruch[i][1];
    if (next_x<0||next_x>=N||next_y<0||next_y>=N)
    continue;
        else{
        if (t[next_x][next_y]==0){
            if (skok(next_x,next_y,N,l_ruchow))
                return 1;
        }
    }
}
    t[x][y]=0;
}
return 0;
}
int szukaj(int x1, int y1,int N)
{
    if(skok(x1-1,y1-1,N,0))
    printf("ok");
    else
    printf("nie ok");
}

int main()
{
    int N,x,y,i,j,k;
    int **tab;
        printf("podaj rozmiar szachownicy\n");
        scanf("%d",&N);
        printf("\npodaj wspolrzedne poczatkowe polozenia konika\nx= ");
        scanf("%d",&x);
        printf("\ny= ");
        scanf("%d",&y);
    tab=(int**)malloc(N*sizeof(int*));
        for(i=0;i<N;i++)
        {
            tab[i]=(int*)malloc(N*sizeof(int));
        }
        for(i=0;i<N;i++){
            for(j=0;j<N;j++){
                tab[i][j]=0;
                printf("%2d",tab[i][j]);
            }
            printf("\n");
        }
            

        szukaj(x,y,N);
        return 0;
}

Czyli nie wyszlo za bardzo nic... Prosze sie nie smiac z tego co ty nawypisywalem, ale jestem naprawde poczatkujacy

0

Ja proponuje poczytać o tym u pana Wirtha w "Algorytmy + struktury danych = programy". Kod co prawda jest tam w pascalu, ale jest też opisana rekurencja z powrotami i zastosowany algorytm.

1 użytkowników online, w tym zalogowanych: 0, gości: 1