Problem konika szachwego

0

Program jak na razie mi zadziałał tylko z rozmiarem planszy 8 i współrzędnych 0 i 0. Co mogę mieć źle wpisane w kodzie, bo po wpisaniu np. rozmiar planszy 10 i współrzędnych początkowych 4 i 4 program się zawiesza, tak jakby gdzieś była pętla nieskończona. Proszę, sprawdźcie, gdzie może być błąd w kodzie:

 
#include <iomanip>
#include <iostream>
#include <cstdio>
using namespace std;

int ruchy[12][12];
int szach[10][10];
int n;

void WartRuchy(void)
{
  ruchy[0][0] = -2;  ruchy[0][1] =  1;
  ruchy[1][0] = -1;  ruchy[1][1] =  2;
  ruchy[2][0] =  1;  ruchy[2][1] =  2;
  ruchy[3][0] =  2;  ruchy[3][1] =  1;
  ruchy[4][0] =  2;  ruchy[4][1] = -1;
  ruchy[5][0] =  1;  ruchy[5][1] = -2;
  ruchy[6][0] = -1;  ruchy[6][1] = -2;
  ruchy[7][0] = -2;  ruchy[7][1] = -1;
}
int Ruch(int i, int wsp1, int wsp2)
// i - numer ruchu
// wsp1, wsp2 - aktualne współrzedne skoczka
{
  int nr, wspnast1, wspnast2;
// nr - kolejny ruch sposród osmiu możliwych ruchow
// wspnast1, wspnast2 - współrzedne nastepnego ruchu
  nr = 0;
  while  (nr!=7)  // podczas gdy są możliwe ruchy
  {
    wspnast1 = wsp1+ruchy[nr][0];
    wspnast2 = wsp2+ruchy[nr][1];
    if (wspnast1>=0 && wspnast1<n && wspnast2>=0 && wspnast2<n)
      if (szach[wspnast1][wspnast2]==0)   // zaznaczenie ustawienia następnego ruchu
      {
        szach[wspnast1][wspnast2] = i;
        if (i<n*n) 
        {
           // rekurencyjne wywołanie funkcji dla
           // nastepnego ruchu
          if (!Ruch(i+1,wspnast1,wspnast2))
          {
            // usunięcie zaznaczenia ruchu
            szach[wspnast1][wspnast2] = 0;
          }
          else
            return 1;
        }
        else
          return 1;
      }
      nr = nr+1;   // wybranie następnego ruchu spośród
                   // osmiu możliwych ruchow
  }
  return 0;
}

int main()
{
  int i, j, pocz1, pocz2;
  WartRuchy();
  cout << "Podaj rozmiar szachownicy (maksymalnie 10)" << endl;
  cin >> n;
  cout << "Podaj wspolrzedne poczatkowego ustawienia skoczka: " << endl;
  cin >> pocz1 >> pocz2;
// zaznaczenie w tablicy Szach punktu początkowego
  szach[pocz1][pocz2] = 1;
// wywołanie rekurencyjnej funkcji Ruch
  if (Ruch(2,pocz1,pocz2))
  {
    for (i = 0; i < n; i++)
    {
      for (j = 0; j < n; j++)
        cout << setw(4) << szach[i][j];
      cout << endl;
    }
  }
  else
    cout << "Ustawienie niemozliwe";
  cin.ignore();
  getchar();
  return 0;
}
0

A samemu pod debuggerem odpalić to nie łaska?

0

A jak to włączyć w Visualu c++ 2010 Express? Bo jak klikam Zakładkę "Debug" i "Start Debugging" to wyświetla się mi od razu okienko z programem. Wydaje mi się, że problem tkwi chyba raczej w prędkości procka, bo niektóre ustawienia skoczka, np. dla tablicy wielkości 6 wszystkie kombinacje pozycji skoczka powinny działać, to po ustawieniu skoczka na danej pozycji czekam na wyświetlenie gotowej tabicy, gdy skoczek przeszedłe cała, czasem kilka minut. Mój komp to Lenovo 3000 n200.

0

to debuguj z odpowiednim wejściem, nie wiesz jak testować swój własny kod?

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