CNTT2
Mời các bạn đăng kí thành viên để hưởng được những quền lợi từ diễn đàn, và cùng nhau chia sẻ kiến thức ,giao lưu học hỏi.
Nếu bạn đã là thành viên của diễn đàn thì hãy nhấn login để đăng nhập vào diễn đàn.
Cảm ơn các bạn đã tham gia diễn đàn CNTT2-K9



CNTT2
Mời các bạn đăng kí thành viên để hưởng được những quền lợi từ diễn đàn, và cùng nhau chia sẻ kiến thức ,giao lưu học hỏi.
Nếu bạn đã là thành viên của diễn đàn thì hãy nhấn login để đăng nhập vào diễn đàn.
Cảm ơn các bạn đã tham gia diễn đàn CNTT2-K9



CNTT2
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.


HỆ THỐNG DIỄN ĐÀN CỦA CNTT2K9
 
Trang ChínhTrang Chính  Latest imagesLatest images  Tìm kiếmTìm kiếm  Đăng kýĐăng ký  Đăng NhậpĐăng Nhập  
Đăng Nhập
Tên truy cập:
Mật khẩu:
Đăng nhập tự động mỗi khi truy cập: 
:: Quên mật khẩu
Xem điểm thi
Các bạn nhập MSSV vào ô bên dưới
Ví dụ như: 09.020.001

Similar topics
Tìm kiếm
 
 

Display results as :
 
Rechercher Advanced Search
Latest topics
Top posters
cutuan527 (1051)
Bài Toán Mã Đi Tuần. I_vote_lcapBài Toán Mã Đi Tuần. I_voting_barBài Toán Mã Đi Tuần. I_vote_rcap 
caingocthanh (559)
Bài Toán Mã Đi Tuần. I_vote_lcapBài Toán Mã Đi Tuần. I_voting_barBài Toán Mã Đi Tuần. I_vote_rcap 
holyangell (486)
Bài Toán Mã Đi Tuần. I_vote_lcapBài Toán Mã Đi Tuần. I_voting_barBài Toán Mã Đi Tuần. I_vote_rcap 
bankimo (381)
Bài Toán Mã Đi Tuần. I_vote_lcapBài Toán Mã Đi Tuần. I_voting_barBài Toán Mã Đi Tuần. I_vote_rcap 
zailangtu911 (369)
Bài Toán Mã Đi Tuần. I_vote_lcapBài Toán Mã Đi Tuần. I_voting_barBài Toán Mã Đi Tuần. I_vote_rcap 
nguyenthanhvu (300)
Bài Toán Mã Đi Tuần. I_vote_lcapBài Toán Mã Đi Tuần. I_voting_barBài Toán Mã Đi Tuần. I_vote_rcap 
dinhhuunho (153)
Bài Toán Mã Đi Tuần. I_vote_lcapBài Toán Mã Đi Tuần. I_voting_barBài Toán Mã Đi Tuần. I_vote_rcap 
Admin (145)
Bài Toán Mã Đi Tuần. I_vote_lcapBài Toán Mã Đi Tuần. I_voting_barBài Toán Mã Đi Tuần. I_vote_rcap 
nguyen chi ha (145)
Bài Toán Mã Đi Tuần. I_vote_lcapBài Toán Mã Đi Tuần. I_voting_barBài Toán Mã Đi Tuần. I_vote_rcap 
zztanzzthanhzz (126)
Bài Toán Mã Đi Tuần. I_vote_lcapBài Toán Mã Đi Tuần. I_voting_barBài Toán Mã Đi Tuần. I_vote_rcap 
Liên kết
Trường Đại Học Cửu Long
Diễn đàn thầy Pha
Lớp CNTT3-K9
Lớp CNTT1-K9
Lớp CNTT1-K10
Lớp CNTT2-K10
April 2024
SunMonTueWedThuFriSat
 123456
78910111213
14151617181920
21222324252627
282930    
CalendarCalendar
Thắc mắc
Người Quản Trị
Chat
Moderator
Chat
Statistics
Diễn Đàn hiện có 7385 thành viên
Chúng ta cùng chào mừng thành viên mới đăng ký: lanhuong dinh

Tổng số bài viết đã gửi vào diễn đàn là 5059 in 1953 subjects

Share | 
 

 Bài Toán Mã Đi Tuần.

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
zztanzzthanhzz
Thành viên cấp 2
Thành viên cấp 2


Nam Tổng số bài gửi : 126
Join date : 17/07/2009
Age : 33
Đến từ : CNTT1 K9

Bài Toán Mã Đi Tuần. Vide
Bài gửiTiêu đề: Bài Toán Mã Đi Tuần.   Bài Toán Mã Đi Tuần. I_icon_minitimeTue Mar 16, 2010 3:12 am

Bài toán mã đi tuần, code của bạn đã giải quyết được với bàn cờ kích thước bao nhiêu? 5x5 hay là 6x6 ???

Với code được học trên lớp thì chỉ có thể giải quyết được dữ liệu cỡ đó là cùng!

Tuy nhiên hiện nay người ta có code giải quyết được bàn cờ 100x100. Các bạn có tin nổi không?

Mình chỉ mới viết được code giải quyết với kích thước bàn cờ trên 20 thôi! Các bạn cùng bàn luận nhé!

Code có dùng cấp phát động: (khá rõ ràng, dễ hiểu, giải quyết được bàn cờ tối đa 20x20)
Code:

// DuongTanThanh.Net
// Sdt: 0169.736.4746
// Yahoo: khongthengungchat

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define max 100
#define fo "madituan.out"

FILE *f;
int X[8]={-2,-2,-1,1,2,2,1,-1},
    Y[8]={-1,1,2,2,1,-1,-2,-2},
    sodong, socot, dd[max][max],
    csdong, cscot, sonuocdi;

typedef struct vitri{
   int bac, csd, csc;
};
typedef struct node{
   vitri info;
   node *next;
};
typedef struct list{
   node *pHead, *pTail;
};

void input(){
   printf("Nhap so dong: ");scanf("%d",&sodong);
   printf("Nhap so cot: ");scanf("%d",&socot);
   printf("Nhap toa do cua quan Ma:\n");
   printf("x = ");scanf("%d",&csdong);
   printf("y = ");scanf("%d",&cscot);
   for (int i=0; i<sodong; i++)
   for (int j=0; j<socot;  j++)
      dd[i][j]=0;
   sonuocdi = 1;
   dd[csdong][cscot] = 1;
}

int in(int i, int j){
   if ((0<=i)&&(i<sodong)&&(0<=j)&&(j<socot))
      return 1;
   return 0;
}

void push(list &l, node *p){
   if (l.pHead==NULL)
      l.pHead=l.pTail=p;
   else{
      p->next=l.pHead;
      l.pHead=p;
   }
}

node *getnode (int bac, int csd, int csc){
   vitri o;
   o.bac = bac;
   o.csd = csd;
   o.csc = csc;
   node *p= new node;
   p->info = o;
   p->next = NULL;
   return p;
}

int bac (int x, int y){
   int b=0;
   for (int i=0; i<8; i++)
      if (in(x+X[i], y+Y[i])&&(dd[x+X[i]][y+Y[i]]==0))
         b++;
   return (b);
}

void interchange(list &l){
   node *p=l.pHead;
   while (p != NULL){
      node *q=p->next;
      while (q != NULL){
            if (q->info.bac < p->info.bac){
            vitri temp=q->info;
            q->info = p->info;
            p->info = temp;
            }
            q = q->next;
      }
      p = p->next;
   }
}

list getlist(int csd, int csc){
   list l;
   l.pHead=l.pTail=NULL;
   for (int i=0; i<8; i++)
      if (in(csd+X[i], csc+Y[i])&&(dd[csd+X[i]][csc+Y[i]]==0)){
         node *p = getnode(bac(csd+X[i], csc+Y[i]), csd+X[i], csc+Y[i]);
         push(l, p);
      }
   interchange(l);
   return l;
}

void output(int kq[max][max]){
   f=fopen(fo,"w");
   for (int i=0; i<sodong; i++){
      for (int j=0; j<socot; j++){
         fprintf(f,"%4d",kq[i][j]);
      }
      fprintf(f,"\n");
   }
   fclose(f);
   printf("Xem ket qua o file MaDiTuan.Out");
   getch();
   exit(1);
}

void doing(int csd, int csc){
   list l = getlist(csd, csc);
   while (l.pHead!=NULL){
      sonuocdi++;
      dd[l.pHead->info.csd][l.pHead->info.csc] = sonuocdi;
      doing(l.pHead->info.csd, l.pHead->info.csc);
      dd[l.pHead->info.csd][l.pHead->info.csc] = 0;
      sonuocdi--;
      node *p = l.pHead;
      l.pHead = p->next;
      delete(p);
   }
   if (sonuocdi == sodong*socot)
      output(dd);
}

void main(){
   clrscr();
   input();
   doing(csdong, cscot);
   printf("Khong tim thay duong di nao thoa man bai toan MA DI TUAN");
   getch();
}

Code không dùng cpđ: (khó hiểu hơn, giải quyết được bàn cờ tối đa 26x27):
Code:

// DuongTanThanh.Net
// Sdt: 0169.736.4746
// Yahoo: khongthengungchat

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define max 100
#define fo "madituan.out"

FILE *f;
int X[8]={-2,-2,-1,1,2,2,1,-1},
    Y[8]={-1,1,2,2,1,-1,-2,-2},
    sodong, socot, dd[max][max],
    csdong, cscot, sonuocdi;

void input(){
   printf("Nhap so dong: ");scanf("%d",&sodong);
   printf("Nhap so cot: ");scanf("%d",&socot);
   printf("Nhap toa do cua quan Ma:\n");
   printf("x = ");scanf("%d",&csdong);
   printf("y = ");scanf("%d",&cscot);
   for (int i=0; i<sodong; i++)
   for (int j=0; j<socot;  j++)
      dd[i][j]=0;
   sonuocdi = 1;
   dd[csdong][cscot] = 1;
}

int in(int i, int j){
   if ((0<=i)&&(i<sodong)&&(0<=j)&&(j<socot))
      return 1;
   return 0;
}

int bac (int x, int y){
   int b=0;
   for (int i=0; i<8; i++)
      if (in(x+X[i], y+Y[i])&&(dd[x+X[i]][y+Y[i]]==0))
         b++;
   return (b);
}

void swap(int list[8][3], int x, int y){
   int temp;
   for (int i=0; i<3; i++){
      temp=list[x][i];
      list[x][i]=list[y][i];
      list[y][i]=temp;
   }
}

void bubble(int list[8][3], int spt){
   for (int i=0; i<spt-1; i++)
      for (int j=spt-1; j>i; j--)
         if (list[j][0]<list[j-1][0])
            swap(list,j,j-1);
}

void create(int x, int y, int list[8][3], int &spt){
   spt=0;
   for (int i=0; i<8; i++)
      if (in(x+X[i], y+Y[i])&&(dd[x+X[i]][y+Y[i]]==0)){
         list[spt][0]= bac(x+X[i], y+Y[i]);
         list[spt][1]= x+X[i];
         list[spt][2]= y+Y[i];
         spt++;
      }
   bubble(list, spt);
}

void output(int kq[max][max]){
   f=fopen(fo,"w");
   for (int i=0; i<sodong; i++){
      for (int j=0; j<socot; j++){
         fprintf(f,"%4d",kq[i][j]);
      }
      fprintf(f,"\n");
   }
   fclose(f);
   printf("Xem ket qua o file MaDiTuan.Out");
   getch();
   exit(1);
}

void doing(int csd, int csc){
   if (sonuocdi == sodong*socot)
      output(dd);

   int list[8][3], spt;
   create(csd, csc, list, spt);

   for (int i=0; i<spt; i++){
      sonuocdi++;
      dd [list[i][1]] [list[i][2]] = sonuocdi;
      doing(list[i][1], list[i][2]);
      dd [list[i][1]] [list[i][2]] = 0;
      sonuocdi--;
   }
}

void main(){
   clrscr();
   input();
   doing(csdong, cscot);
   printf("Khong tim thay duong di nao thoa man bai toan MA DI TUAN");
   getch();
}
Về Đầu Trang Go down
zztanzzthanhzz
Thành viên cấp 2
Thành viên cấp 2


Nam Tổng số bài gửi : 126
Join date : 17/07/2009
Age : 33
Đến từ : CNTT1 K9

Bài Toán Mã Đi Tuần. Vide
Bài gửiTiêu đề: Re: Bài Toán Mã Đi Tuần.   Bài Toán Mã Đi Tuần. I_icon_minitimeTue Mar 16, 2010 3:15 am

Download 2 code trên: http://duongtanthanh.net/blog/attachment.php?fid=11
Password giải nén là: duongtanthanh.net

Sau khi chạy chương trình, kết quả sẽ được ghi vào file MaDiTuan.Out trong thư mục BIN của C++

Các bạn cùng góp ý để mình mở rộng phạm vi thêm nhé! 08
Về Đầu Trang Go down
cutuan527
Moderators
Moderators
cutuan527

Nam Tổng số bài gửi : 1051
Join date : 26/04/2009
Age : 33
Đến từ : Vĩnh Long

Bài Toán Mã Đi Tuần. Vide
Bài gửiTiêu đề: Re: Bài Toán Mã Đi Tuần.   Bài Toán Mã Đi Tuần. I_icon_minitimeTue Mar 16, 2010 2:07 pm

Link có vấn đề rùi 01 01
Về Đầu Trang Go down
http://www.cutuan.tk
zztanzzthanhzz
Thành viên cấp 2
Thành viên cấp 2


Nam Tổng số bài gửi : 126
Join date : 17/07/2009
Age : 33
Đến từ : CNTT1 K9

Bài Toán Mã Đi Tuần. Vide
Bài gửiTiêu đề: Re: Bài Toán Mã Đi Tuần.   Bài Toán Mã Đi Tuần. I_icon_minitimeTue Mar 16, 2010 10:41 pm

đó là do file đính kèm nên nó không cho down tùm lum, chắc sợ DDOS hay sao áh!

các bạn chịu khó vào đây down dùm mình nhé! http://duongtanthanh.net/blog/read.php?65
Về Đầu Trang Go down
Sponsored content




Bài Toán Mã Đi Tuần. Vide
Bài gửiTiêu đề: Re: Bài Toán Mã Đi Tuần.   Bài Toán Mã Đi Tuần. I_icon_minitime

Về Đầu Trang Go down
 

Bài Toán Mã Đi Tuần.

Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
CNTT2 :: IT WORLD :: CƠ SỞ LẬP TRÌNH-
Free forum | ©phpBB | Free forum support | Báo cáo lạm dụng | Thảo luận mới nhất