Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: làm sao để thoát khỏi hàm đệ quy

  1. #1
    Ngày gia nhập
    12 2010
    Bài viết
    19

    Mặc định làm sao để thoát khỏi hàm đệ quy

    các bạn cho mình hỏi với bài mã đi tuần này làm sao để chỉ ra 1 kết quả thôi, ko cần xuất ra tất cả trường hợp, mình dùng break mãi mà không dc, ai giúp mình với.
    Code:
    #include<iostream.h>
    #include<stdio.h>
    #include<windows.h>
    
    #define SIZE 5
    
    int BANCO[SIZE][SIZE];
    int soloigiai = 0;
    
    int d[] = {1, 1, 2, 2, -1, -1, -2, -2};
    int c[] = {2, -2, 1, -1, 2, -2, 1, -1};
    
    void Init()
    {
    	for(int i = 0; i < SIZE; i++)
    		for(int j = 0; j < SIZE; j++)
    		{
    			BANCO[i][j] = 0;
    		}
    }
    
    
    void PrintMove(int BANCO[][SIZE])
    {
    	for(int i = 0; i < SIZE; i++)
    	{
    		for(int j = 0; j < SIZE;j++)
    		{
    				printf("%7.d", BANCO[i][j]);
    		}
    		cout << endl;	
    	}
    	cout << endl;
    }
    
    
    
    
    
    void Moves(int n, int x, int y)
    {
    	for(int i = 0; i < 8;i++)
    	{
    		int	xMoi = x + c[i];
    		int yMoi = y + d[i];
    
    		if(xMoi >= 0 && xMoi < SIZE && yMoi >= 0 && yMoi < SIZE && BANCO[xMoi][yMoi] == 0)
    		{
    			BANCO[xMoi][yMoi] = n;
    			if(n == SIZE * SIZE)
    			{
    					PrintMove(BANCO);
    			}
    			else
    				Moves(n + 1, xMoi, yMoi);
    				BANCO[xMoi][yMoi] = 0;
    
    		}
    	}
    }
    
    
    void main()
    {
    	int x, y;
    	cout << "Nhap toa do x: ";
    	cin >> x;
    	cout << "Nhap toa do y: ";
    	cin >> y;
    
    	Init();
    	BANCO[x][y] = 1;
    	cout << "ket qua la : " << endl;
    	Moves(2, x, y); 
    
    }

  2. #2
    Ngày gia nhập
    03 2009
    Nơi ở
    %appdata%\Temp
    Bài viết
    819

    Dùng một cờ hiệu mà out ra thôi
    .::[The best way to predict the future is to invent it]::.
    __________________________________________________ _ - Alan Kay -

  3. #3
    Ngày gia nhập
    03 2010
    Nơi ở
    My Home
    Bài viết
    772

    Code thì lúc printf, lúc thì cout, cin tùm lum.

    Giải pháp: Thay kiểu trả về hàm Moves thành bool, lấy một biến đếm các giá trị đã qua. Khi biến này đạt max thì out ra.

    Sửa hàm Moves thế này:

    C Code:
    1. #include<stdio.h>
    2.  
    3. #define SIZE 5
    4.  
    5. int BANCO[SIZE][SIZE];
    6. int soloigiai = 0;
    7.  
    8. int d[] = {1, 1, 2, 2, -1, -1, -2, -2};
    9. int c[] = {2, -2, 1, -1, 2, -2, 1, -1};
    10.  
    11. using namespace std;
    12.  
    13. void Init()
    14. {
    15.     for(int i = 0; i < SIZE; i++)
    16.         for(int j = 0; j < SIZE; j++)
    17.         {
    18.             BANCO[i][j] = 0;
    19.         }
    20. }
    21.  
    22.  
    23. void PrintMove(int BANCO[][SIZE])
    24. {
    25.     for(int i = 0; i < SIZE; i++)
    26.     {
    27.         for(int j = 0; j < SIZE;j++)
    28.         {
    29.                 printf("%4.d", BANCO[i][j]);
    30.         }
    31.         printf("\n");
    32.     }
    33. }
    34.  
    35.  
    36.  
    37.  
    38.  
    39. bool Moves(int *n, int x, int y)
    40. {
    41.     if(*n > SIZE * SIZE - 1)
    42.     {
    43.         return true;
    44.     }
    45.     for(int i = 0; i < 8;i++)
    46.     {
    47.         int xMoi = x + c[i];
    48.         int yMoi = y + d[i];
    49.  
    50.         if(xMoi >= 0 && xMoi < SIZE && yMoi >= 0 && yMoi < SIZE)
    51.         {
    52.             if(!BANCO[xMoi][yMoi])
    53.             {
    54.                 BANCO[xMoi][yMoi] = ++(*n);;
    55.                 if(Moves(n, xMoi, yMoi))
    56.                     return true;
    57.                 else
    58.                 {
    59.                     (*n)--;
    60.                     BANCO[xMoi][yMoi] = 0;
    61.                 }
    62.             }
    63.         }
    64.     }
    65.     return false;
    66. }
    67.  
    68.  
    69. int main()
    70. {
    71.     int x = 1, y = 1;
    72.     int n = 1;
    73.  
    74.     Init();
    75.     BANCO[x][y] = 1;
    76.     printf("Ket qua la: \n\n");
    77.     if(Moves(&n, x, y))
    78.         PrintMove(BANCO);
    79.     return 0;
    80. }

  4. #4
    Ngày gia nhập
    12 2010
    Bài viết
    19

    Trích dẫn Nguyên bản được gửi bởi namdq2k Xem bài viết
    Code thì lúc printf, lúc thì cout, cin tùm lum.

    Giải pháp: Thay kiểu trả về hàm Moves thành bool, lấy một biến đếm các giá trị đã qua. Khi biến này đạt max thì out ra.

    Sửa hàm Moves thế này:

    C Code:
    1. #include<stdio.h>
    2.  
    3. #define SIZE 5
    4.  
    5. int BANCO[SIZE][SIZE];
    6. int soloigiai = 0;
    7.  
    8. int d[] = {1, 1, 2, 2, -1, -1, -2, -2};
    9. int c[] = {2, -2, 1, -1, 2, -2, 1, -1};
    10.  
    11. using namespace std;
    12.  
    13. void Init()
    14. {
    15.     for(int i = 0; i < SIZE; i++)
    16.         for(int j = 0; j < SIZE; j++)
    17.         {
    18.             BANCO[i][j] = 0;
    19.         }
    20. }
    21.  
    22.  
    23. void PrintMove(int BANCO[][SIZE])
    24. {
    25.     for(int i = 0; i < SIZE; i++)
    26.     {
    27.         for(int j = 0; j < SIZE;j++)
    28.         {
    29.                 printf("%4.d", BANCO[i][j]);
    30.         }
    31.         printf("\n");
    32.     }
    33. }
    34.  
    35.  
    36.  
    37.  
    38.  
    39. bool Moves(int *n, int x, int y)
    40. {
    41.     if(*n > SIZE * SIZE - 1)
    42.     {
    43.         return true;
    44.     }
    45.     for(int i = 0; i < 8;i++)
    46.     {
    47.         int xMoi = x + c[i];
    48.         int yMoi = y + d[i];
    49.  
    50.         if(xMoi >= 0 && xMoi < SIZE && yMoi >= 0 && yMoi < SIZE)
    51.         {
    52.             if(!BANCO[xMoi][yMoi])
    53.             {
    54.                 BANCO[xMoi][yMoi] = ++(*n);;
    55.                 if(Moves(n, xMoi, yMoi))
    56.                     return true;
    57.                 else
    58.                 {
    59.                     (*n)--;
    60.                     BANCO[xMoi][yMoi] = 0;
    61.                 }
    62.             }
    63.         }
    64.     }
    65.     return false;
    66. }
    67.  
    68.  
    69. int main()
    70. {
    71.     int x = 1, y = 1;
    72.     int n = 1;
    73.  
    74.     Init();
    75.     BANCO[x][y] = 1;
    76.     printf("Ket qua la: \n\n");
    77.     if(Moves(&n, x, y))
    78.         PrintMove(BANCO);
    79.     return 0;
    80. }

    hjhj, minh hieu roi, thanks cac ban nhieu nha!

Các đề tài tương tự

  1. Hà Nội xưa, Hà Nội phố - Một thoáng hoài niệm
    Gửi bởi vietnamduhi trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 23-10-2013, 02:51 PM
  2. Bệnh thoái hóa đốt sống cô - NEOSAMIN Thuốc chữa bệnh thoái hóa đốt sống
    Gửi bởi thuocqui trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 24-05-2012, 09:43 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn