Advertisement
alexarcan

problema_calului_5_DSA

Dec 11th, 2014
397
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.88 KB | None | 0 0
  1. #include<stdio.h>
  2.  
  3. int dx[8] = { -1, 1, 2, 2, -1, 1, -2, -2 };
  4. int dy[8] = { -2, -2, -1, 1, 2, 2, -1, 1 };
  5. int Px = 0, Py = 0;
  6. int A[5][5];
  7.  
  8.  
  9. int acceptable(int k){
  10.    
  11.     if ((Px + dx[k] >= 0) && (Py + dy[k]>=0 ))
  12.         if ((Px + dx[k]<=4) && (Py+dy[k]<=4 ))
  13.             if (A[Px + dx[k]][Py + dy[k]] == 0)
  14.                 return 1;
  15.     return 0;
  16.    
  17.    
  18. }
  19.  
  20. int solution(int k, int i){
  21.     return (i==24);
  22. }
  23.  
  24. void printsolution(){
  25.  
  26.     for (int i = 0; i < 5; i++)
  27.     {
  28.         for (int j = 0; j < 5; j++)
  29.             printf("  %d  ", A[i][j]);
  30.         printf("\n");
  31.     }
  32. }
  33.  
  34. void back(int i){
  35.  
  36.     for (int k = 0; k < 8; k++)
  37.     if (acceptable(k)){
  38.         A[Px + dx[k]][Py + dy[k]] = i;
  39.         Px = Px + dx[k];
  40.         Py = Py + dy[k];
  41.  
  42.         if (solution(k, i)){
  43.             printsolution();
  44.             printf("\n");
  45.         }
  46.  
  47.         else
  48.             back(i + 1);
  49.  
  50.         A[Px][Py] = 0;
  51.         Px = Px - dx[k];
  52.         Py = Py - dy[k];
  53.     }
  54.  
  55. }
  56.  
  57.  
  58. int main(void){
  59.     A[0][0] = 1;
  60.     back(1);
  61.    
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement