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

Đề tài: Bài con mã đi tuần -Em viết code rồi nhưng ko in ra màn hình, giúp em sửa code với-

  1. #1
    Ngày gia nhập
    04 2008
    Bài viết
    8

    Post Bài con mã đi tuần -Em viết code rồi nhưng ko in ra màn hình, giúp em sửa code với-

    Bài con mã đi tuần:
    Đi con mã trong bàn cờ vua 8x8, sao cho con mã đi hết các ô trên bàn cờ và mỗi ô chỉ đi 1 lần.

    Em hiểu thuật toán thế này:
    Con mã đầu tiên theo em ở vị trí [0][1] (theo cách sắp quân trên bàn cờ).
    1 con mã sẽ đi đc tám hướng.
    Em thiết lập BànCờ[8][8] tất cả các ptử đều == 0 và chỉ có phầntử [0][1] == 1
    Sau đó dùng kĩ thuật quay liều để cho con mã chạy. Đệ quy chỉ dừng lại khi con mã đã chạy 64 ô (dùng biết đếm để tăng lên, lúc đầu đếm = 1).

    Em viết code nhưng ko in ra màn hình. Chtrình ko báo lỗi
    Các bác sửa dùm em với!!!
    Đây là code em nè!!!
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <windows.h>
    void NhapMaTran(int a[][8]);
    void XuatMaTran(int a[][8],  int i, int j);
    void MaDi(int BanCo[][8], int i, int j,int dem);
    void main()
    {
    	int a[8][8];
    	NhapMaTran(a);
    	MaDi(a,0,1,1);
    	getch();
    }
    void NhapMaTran(int a[][8])
    {
    	for (int i=0; i<8; i++)
    	{
    		for (int j=0; j<8;j++)
    		{
    			if (i==0 && j==1)
    				a[i][j] = 1;
    			else
    				a[i][j] =0;
    			
    		}
    	}
    }
    void XuatMaTran(int a[][8], int i, int j)
    {
    	if (j == 8)
    	{
    		if (i==7)
    		{
    			exit(0) ;
    		}
    		printf("\n");
    		XuatMaTran(a,i+1,0);
    	}
    	printf("%4d", a[i][j]);
    	XuatMaTran(a,i,j+1);
    }
    void KiemTra(int BanCo[][8])
    {
    	int flag =1;
    	for (int i=0; i<8; i++)
    	{
    		for (int j=0; j<8; j++)
    		{
    			if (BanCo[i][j]== 0)
    			{
    				flag = 0;
    				break;
    			}
    		}
    		if (flag == 0)
    		{
    			break;
    		}
    	}
    	if (flag == 1)
    	{
    		printf("Xuat ma tran vua nhap: \n");
    		XuatMaTran(BanCo,0,0);
    	}
    }
    void MaDi(int BanCo[][8], int i, int j,int dem)
    {
        if (dem==6)
        {
    		KiemTra(BanCo);
        }
        else
        {
            int dx[8]={-1,-2,-2,-1, 1,2,2,1};
    		int dy[8]={-2,-1,1,2,2, 1,-1,-2};
            for (int k=0; k<8;k++)
            {
    			if (i+dx[k]>=0 && i+dx[k]<=7 && j+dy[k]>=0 && j+dy[k]<=7)
    			{
    				if (BanCo[i+dx[k]][j+dy[k]] ==0)
    				{
    					dem++;
    					BanCo[i+dx[k]][j+dy[k]] = dem;
    					MaDi(BanCo,i+dx[k],j+dy[k],dem);
    				}
    			}
    		}
       }
    }
    Hân hạnh đc mọi người giúp đỡ

  2. #2
    Ngày gia nhập
    05 2008
    Bài viết
    11

    này bạn FREB, bạn thử xem code ở link này xem:http://forums.congdongcviet.com/show...n+tu%E1%BA%A7n

    nó nằm sau code của bài 8 con hậu.
    bạn cứ thử coi xem có júp j` cho bạn đc hok?

  3. #3
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Code của cậu quay lùi nhưng không gỡ bỏ vị trí thì làm sao mà quay ? Đây là code dựa theo idea của cậu, có điều chậm, dùng heuristic sẽ nhanh hơn
    C Code:
    1. #include <cstdio>
    2.  
    3. const int _c[ ] = {
    4.     -2, -1, +1, +2, +2, +1, -1, -2
    5. };
    6.  
    7. const int _r[ ] = {
    8.     +1, +2, +2, +1, -1, -2, -2, -1
    9. };
    10.  
    11. const char* seperator = "_-_-_-_-_-_";
    12.  
    13. int G[ 8 ][ 8 ] = {
    14.     1, 0, 0, 0, 0, 0, 0, 0,
    15.     0, 0, 0, 0, 0, 0, 0, 0,
    16.     0, 0, 0, 0, 0, 0, 0, 0,
    17.     0, 0, 0, 0, 0, 0, 0, 0,
    18.     0, 0, 0, 0, 0, 0, 0, 0,
    19.     0, 0, 0, 0, 0, 0, 0, 0,
    20.     0, 0, 0, 0, 0, 0, 0, 0
    21. };
    22.  
    23. void print_board() {
    24.     for( int x = 0; x < 8; ++x ) {
    25.         for ( int y = 0; y < 8; ++y ) {
    26.             G[ x ][ y ] ? printf( "K" ) : printf( "-" );
    27.         }
    28.         printf( "\n" );
    29.     }
    30.     printf( "\n %s \n", seperator );
    31. }
    32.  
    33. void go( int r, int c, int th )
    34. {
    35.     int pause;
    36.     G[ r ][ c ] = 1;
    37.     if( th >= 63 ) {
    38.         return;
    39.     }
    40.     else {
    41.         for( int o = 0; o < 8; ++o ) {
    42.             int next_r = r + _r[ o ];
    43.             int next_c = c + _c[ o ];
    44.             if( !( next_r > 7 ||
    45.                         next_r < 0 ||
    46.                             next_c > 7 ||
    47.                                 next_c < 0 ||
    48.                                     G[ next_r ][ next_c ] == 1
    49.                 )
    50.             )
    51.             {
    52.                 print_board();
    53.                 scanf( "%d", &pause );
    54.                 go( next_r, next_c, th + 1 );
    55.                 G[ next_r ][ next_c ] = 0;
    56.             }
    57.         }
    58.     }
    59. }
    60.  
    61. int main() {
    62.     go( 0, 0, 0 );
    63. }

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    R2 vứt 1 bài heuristic lên kid coi với nào ?
    // cố gắng comment như phong cách cũ nhé.

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Cho code, nhưng không comment vì ghét ai xin code :-", đặc biệt là kidkid
    C++ Code:
    1. #include <iostream>
    2. #include <iomanip>
    3. #include <vector>
    4. #include <algorithm>
    5. #include <string>
    6.  
    7. using std::cout;
    8. using std::cin;
    9. using std::endl;
    10. using std::setw;
    11. using std::vector;
    12. using std::ostream;
    13. using std::string;
    14. using std::swap;
    15. using std::istream;
    16.  
    17. const int SIZE = 8;
    18. const int V[]  = { +2, -1, -1, -2, -2, +1, +1, +2 };
    19. const int H[]  = { -1, +2, -2, -1, +1, -2, +2, +1 };
    20.  
    21. typedef vector< vector< int > > two_dimensional_array;
    22. two_dimensional_array K;
    23. two_dimensional_array moves;
    24.  
    25. const string  separator_lines = "-_-_-_-_-_-_-_-";
    26. const string  stop_to_watch   = "\n Press enter key to see knight moves : ";
    27. vector< int > temp_row( SIZE, 0 );
    28. vector< int > temp_col( SIZE, 0 );
    29.  
    30. bool is_valid_move( int r, int c )
    31. {
    32.     if( r > SIZE - 1 || r < 0 || c > SIZE - 1 || c < 0 || K[ r ][ c ] != 0 )
    33.         return false;
    34.     else
    35.         return true;
    36. }
    37.  
    38. void print_solution( istream& in, ostream& out )
    39. {
    40.     for( int x = 0; x < SIZE; ++x ) {
    41.         for( int y = 0; y < SIZE; y++ ) {
    42.             out << setw( 3 ) << K[ x ][ y ] ;
    43.         }    
    44.         out << "\n";
    45.     }
    46.     out << separator_lines << "\n";
    47.     out << stop_to_watch << "\n";
    48.     in.get();
    49.    
    50. }
    51.  
    52. void heuristic_approach( int row, int col, int& step, vector< int >& solution )
    53. {  
    54.     /*
    55.         Possible moves
    56.     */
    57.     int attempt_row,
    58.         attempt_col;
    59.  
    60.     /*
    61.         Generate possibility
    62.     */
    63.     for( int x = 0; x < SIZE; ++x ) {
    64.         for( int y = 0; y < SIZE; ++y ) {
    65.             moves[ x ][ y ] = 0;
    66.             for( int each_step = 0; each_step < SIZE; ++each_step ) {
    67.                 attempt_row = x + V[ each_step ];
    68.                 attempt_col = y + H[ each_step ];
    69.                 if( is_valid_move( attempt_row, attempt_col ) )
    70.                     moves[ x ][ y ]++;
    71.             }
    72.         }
    73.     }
    74.        
    75.     int the_row_before, the_row_after;
    76.     int the_col_before, the_col_after;
    77.    
    78.     step = 0; /* THE MOST IMPORTANT */
    79.    
    80.     for( int at = 0; at < SIZE; ++at ) {
    81.         attempt_row = row + V[ at ];
    82.         attempt_col = col + H[ at ];
    83.         if( is_valid_move( attempt_row, attempt_col ) ) {
    84.             temp_row[ step ] = attempt_row;
    85.             temp_col[ step ] = attempt_col;
    86.             /*
    87.                 Save step
    88.             */
    89.             solution[ step ] = step;
    90.             step++;
    91.         }
    92.     }
    93.    
    94.     for( int x = 0; x < step ; ++x ) {
    95.         for( int y = x + 1; y < step; ++y ) {
    96.             the_row_before  = temp_row[ solution[ x ] ];
    97.             the_col_before  = temp_col[ solution[ x ] ];
    98.             the_row_after   = temp_row[ solution[ y ] ];
    99.             the_col_after   = temp_col[ solution[ y ] ];
    100.             if( moves[ the_row_before ][ the_col_before ] > moves[ the_row_after ][ the_col_after ] )
    101.                 swap( solution[ x ], solution[ y ] );
    102.         }
    103.     }
    104.  
    105.     /*---------------------------------------------------*/
    106. }
    107.  
    108.  
    109. void solve( int times, int row, int col)
    110. {
    111.     vector< int > order_moves( SIZE, 0 );
    112.     int           position = 0;
    113.     int           next_row,
    114.                   next_col;
    115.    
    116.     K[ row ][col ] = times + 1;
    117.  
    118.     while( times < SIZE * SIZE ) {
    119.         print_solution( cin, cout );
    120.         heuristic_approach( row, col, position, order_moves );
    121.         for( int o = 0; o < position; o++) {
    122.             next_col = temp_col[ order_moves[ o ] ];
    123.             next_row = temp_row[ order_moves[ o ] ];
    124.             if( is_valid_move( next_row, next_col ) )
    125.                 solve( times + 1, next_row, next_col);
    126.         }
    127.     }
    128. }
    129.  
    130. int main()
    131. {
    132.     int row, col;
    133.     vector< int > column( SIZE, 0 );
    134.     for( int o = 0; o < SIZE; ++o ) {
    135.         K.push_back( column );
    136.         moves.push_back( column );
    137.     }
    138.    
    139.     cout << "Enter the initial position for Knight \n ";
    140.     cout << " row    : \n";
    141.     cin >> row;
    142.     cout << " column : \n";
    143.     cin >> col;
    144.  
    145.     solve( 0, row, col );
    146.    
    147.     return 0;
    148. }

  6. #6
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Mặc định Bài con mã đi tuần -Em viết code rồi nhưng ko in ra màn hình, giúp em sửa code với-

    Trích dẫn Nguyên bản được gửi bởi kidkid Xem bài viết
    R2 vứt 1 bài heuristic lên kid coi với nào ?
    // cố gắng comment như phong cách cũ nhé.
    Mình cũng có làm bài này lúc học trí tuệ nhân tạo, kid xem thử thế nào :

    C++ Code:
    1. #include <iostream.h>
    2. #include <stdio.h>
    3. #include <conio.h>
    4.  
    5. #define MAX 5
    6. #define MAXSTEP MAX * MAX      
    7.  
    8.  
    9. typedef struct Cell
    10. {
    11.     int x,y;
    12. } _Cell;
    13.  
    14.  
    15. const int DX[8] = { 2,-2, 2,-2, 1, 1,-1,-1 };
    16. const int DY[8] = { 1, 1,-1,-1, 2,-2, 2,-2 };
    17.  
    18.  
    19. void Print(int board[MAX][MAX]);
    20. int FindAvailable(int board[MAX][MAX],int x,int y,Cell *result);
    21. int MinCase(int board[MAX][MAX],Cell *steparray,int count);
    22.  
    23.  
    24. int main(int argc, char* argv[])
    25. {
    26.     int board[MAX][MAX];
    27.     int x0,y0;
    28.     int stepcount = 0;
    29.     Cell steparray[8];
    30.     int n = 0, index;
    31.     int x, y;
    32.  
    33.     cout<<"Nhap x0 : ";
    34.     cin>>x0;
    35.     cout<<"Nhap y0 : ";
    36.     cin>>y0;
    37.  
    38.     cout<<endl<<endl;
    39.  
    40.     x0 = 0;
    41.     y0 = 0;
    42.  
    43.     for (y=0;y<MAX;y++)
    44.         for (x=0;x<MAX;x++)
    45.             board[y][x] = 0;
    46.  
    47.     x = x0;
    48.     y = y0;
    49.  
    50.     board[y][x] = ++stepcount;
    51.  
    52.     do
    53.     {
    54.         n = FindAvailable(board,x,y,&steparray[0]);
    55.         if (n > 0)
    56.         {
    57.             index = MinCase(board,&steparray[0],n);
    58.             x = steparray[index].x;
    59.             y = steparray[index].y;
    60.             board[y][x] = ++stepcount;
    61.         }
    62.     }
    63.     while (n > 0 && stepcount < MAXSTEP);
    64.  
    65.     Print(board);
    66.    
    67.     cout<<endl;
    68.     if (stepcount == MAXSTEP)
    69.         cout<<"Thanh cong !"<<endl;
    70.     else
    71.         cout<<"Khong tim duoc loi giai."<<endl;
    72.  
    73.     getch();
    74.     return 0;
    75. }
    76.  
    77. void Print(int board[MAX][MAX])
    78. {
    79.     for (int y=0;y<MAX;y++)
    80.     {
    81.         for (int x=0;x<MAX;x++)
    82.             printf("%03d ",board[y][x]);
    83.         printf("\n");
    84.     }
    85. }
    86.  
    87. int FindAvailable(int board[MAX][MAX],int x,int y,Cell *result)
    88. {
    89.     int count = 0;
    90.     int row, col;
    91.  
    92.     for (int i=0;i<8;i++)
    93.     {
    94.         row = y + DY[i];
    95.         col = x + DX[i];
    96.        
    97.         if (row >= 0 && row < MAX
    98.             && col >= 0 && col < MAX)
    99.             if (!board[row][col])
    100.             {
    101.                 result[count].x = col;
    102.                 result[count].y = row;
    103.                 count++;
    104.             }
    105.  
    106.     }
    107.  
    108.     return count;
    109. }
    110.  
    111. int MinCase(int board[MAX][MAX],Cell *steparray,int count)
    112. {
    113.     Cell result[8];
    114.     int n;
    115.     int min = MAX + 1;
    116.     int ans;
    117.    
    118.     for (int i=0;i<count;i++)
    119.     {
    120.         n = FindAvailable(board,steparray[i].x,steparray[i].y,result);
    121.         if (n < min)
    122.         {
    123.             min = n;
    124.             ans = i;
    125.         }
    126.     }
    127.  
    128.     return ans;
    129. }
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

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

  1. [Trợ giúp] Hướng dẫn viết code hook API
    Gửi bởi nhokbbb trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 22-04-2013, 11:49 AM
  2. Code các hàm sắp xếp sử dụng template con trỏ hàm viết bằng C++. Giúp mình kiểm tra code
    Gửi bởi satthuvotinh trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 1
    Bài viết cuối: 16-05-2011, 12:32 PM
  3. Viết code trên Form và viết code trong class có gì khác nhau.
    Gửi bởi hocCsharp trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 21
    Bài viết cuối: 21-01-2011, 10:37 PM
  4. Cài đặt C | Cài đặt chương trình để viết code C. Xin giúp đỡ?
    Gửi bởi xuanhung_cntt trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 10-01-2010, 04:40 PM
  5. code mã đi tuần bằng C | source code mã đi tuần
    Gửi bởi quangspk trong diễn đàn Dự án & Source code C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 11-03-2009, 12:08 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