-
10-04-2010, 02:08 PM #1Junior Member
- Ngày tham gia
- Sep 2015
- Đang ở
- 89 Tam Trinh - Hoàng Mai - Hà Nội
- Bài viết
- 0
Chương trình giải ô số Sudoku _ window AFC
đây là chương trình do mình viết! ai cần thì tải về xem thử, nó chạy tương đối hoàn thiện , sau khi tải về giải nén và chạy trên C++ 6.0 là có cửa sổ chương trình.
View more random threads:
- Source code chương trình trích chọn đặc trưng sử dụng Wavelet Haar.
- Từ điển = C For Windows
- Demo COM VS2008.
- Melody Memory - Game đơn giản
- Source code hack game Farm Tribe
- -=]VC6[=- SmallUltilities : Draw analog clock, date and time, notice, and bonus!!!
- Cờ cá ngựa - Đồ án hướng đối tượng
- BitTorrent CLient Downloader C++ - FTKernelAPI
- demo multi thread + CEvent + SendMessage
- [MFC] Mô phỏng lập lịch CPU theo thuật toán RoundRobin
-
05-12-2010, 06:17 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
anh có thể comment vào các hàm trong bài được ko ạ
-
06-12-2010, 04:35 PM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
em cảm ơn anh nhiều, nhưng anh có thề viết cho em hàm sinh số ngẫu nhiên được ko ạ
-
06-12-2010, 04:41 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Sodoku có thể dùng thuật toán Backtracking để duyệt qua tất cả các trường hợp có thể để giải ô số (cũng có thể dùng để phát sinh ô số bằng cách giải 1 ô số sau đó xóa dần random đến khi xóa tiếp thì sinh ra >1 cách giải thì lấy ô số trước đó)
-
06-12-2010, 05:04 PM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Lần trước Hồi học môn Trí Tuệ Nhân Tạo, có bạn cũng làm đề tài này. Bị mình chém cho tơi bời ở các vấn đề sau:
1. Phát sinh Sodoku cấp n (Bạn dùng thuật toán phát sinh hay là Nạp Sodoku có sẵn)
2. Giải Soduku(Bạn sử dụng thuật toán gì hay lại load bản giải có sẵn tương ứng với từng Sodoku).
-
06-12-2010, 05:19 PM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
bạn có thể nói rõ hơn được ko? ví dụ đi
-
06-12-2010, 05:25 PM #7Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Nhà mất mạng giờ đang phải ngồi quán :-S... khi nào có net tớ post code lên đây [IMG]images/smilies/smile.png[/IMG]
-
06-12-2010, 05:26 PM #8Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Mã:void dienso(){ int dem=0,lap=1; int tep,s,so1[9]; for (int r=0;r<9;r++) so1[r]=r+1; while (lap==1) { lap=0; for (int i=1 ;i<=9;i++) for (int j=1 ;j<=9;j++) if (A[i][j]==0) { for (int k=0;k<9;k++) { tep=so1[k]; if (quetngang(tep,i,j)&&quetdoc(tep,i,j)&&queto(tep,i,j)) { ++dem; s=tep; } } if (dem==1) { A[i][j]=s; lap=1; } dem=0;s=0; } }}void cacsocothedien(int x,int y,int z){ int so1[9]; for (int r=0;r<9;r++) so1[r]=r+1; int j=0; for (int h=0;h<9;h++) sokhac[z][h]=0; for (int k=0;k<9;k++) if (quetngang(so1[k],x,y)&&quetdoc(so1[k],x,y)&&queto(so1[k],x,y)) { sokhac[z][j]=so1[k]; j++; }}void cacsokhac(int a){ int temp=0; for (int i=0;i<9;i++) if (sokhac[a][i]!=0) temp++; so[a]=temp;} void xuatdulieu(){ int de=1; for (int i=1;i<=9;i++) { for (int j=1;j<=9;j++) D[de++]=A[i][j]; } }void tim(int m){ int k,h; for (k=1;k<=9;k++) for (h=1;h<=9;h++) if (A[k][h]==0) { t[0][m]=k;t[1][m]=h;return; }} int kiemtra(){ for (int i=1;i<=9;i++) for (int j=1;j<=9;j++) if (A[i][j]==0) return 0; return 1;}void xuly(int i){ for (int m=1;m<=9;m++) for (int n=1;n<=9;n++) B[i][m][n]=A[m][n]; tim(i); cacsocothedien(t[0][i],t[1][i],i); cacsokhac(i); if (so[i]!=0) for (int l=0;l<so[i];l++) { if (ktra==1) return; for (int m1=1;m1<=9;m1++) for (int m2=1;m2<=9;m2++) A[m1][m2]=B[i][m1][m2]; if (sokhac[i][l]!=0) { c1=t[0][i];c2=t[1][i]; A[c1][c2]=sokhac[i][l]; dienso(); if (kiemtra()==1) { xuatdulieu();ktra=1; } if (kiemtra()==0) xuly(i+1); } } }
-
06-12-2010, 05:30 PM #9Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
uh, minh cam on bạn, khi nào được thì bạn cop len cho minh nha
-
06-12-2010, 05:33 PM #10Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi Học Hỏi
2. Giả sử người ta cần xây dựng Sodoku cấp 20 chẳng hạn. Nếu dùng cách 2 xóa đi lấy đâu Sodoku cấp 20 ban đầu mà xóa @@.
Ta luôn sinh được 1 Sodoku cấp n với công thức xác định như sau.
S[i,j]=k;
k=(i+j-1)%(n+1);
if (k==0) k++
Soduku sinh ra có dạng:
1 2 3 ... n
n 1 2 ... n-1
n-1 n 1 ... n-2
....
n n-1 n-2 ... 1
Với chữ số từ 1->n.
Chỉ số hàng,cột tính từ 1.
Ví dụ :
Ví trí hàng 5 cột 3 trong Sodoku cấp 6 cơ bản trên là
k=(5+3-1)%(6+1)=0
vì k=0 nên k=k+1=0+1=1.
Vậy S[5,3]=1.
Không tin thì các bạn có thể thử nghiệm với cấp bất kỳ.
Từ đó có thể hoán vị các hàng ,cột để sinh ra các Sodoku khác.
Còn giải Sodoku thì theo tư tưởng nêu trên.
Xin lỗi vì công thức sinh Sodoku ở trên của mình bị sai.
Dưới đây là mã chương trình và công thức mình đã chỉnh lại phát sinh Sodoku cơ bản, từ đó sinh ra Sodoku ngẫu nhiên.
Mã đã kiểm tra trên VC++ 2008
Mã:#include <iostream>#include <iomanip>#include <ctime>#include <cstdlib>#include <cstdio>#include <conio.h> using namespace std;#define MAX 20 //Creating a base Sododu with rankvoid CreateBaseSodoku(int rank,int **&Sodoku){ //Alloc Memory for Sodoku Sodoku=new int*[rank]; for (int i=0;i<rank;i++) { Sodoku[i]=new int[rank]; for (int j=0;j<rank;j++) //This is the formula to determining the value o cell at row i,column j //on Sodoku Sodoku[i][j]=(i+j)%rank+1; }} //Show up Sodokuvoid Show(int rank,int **Sodoku){ if (Sodoku==NULL) { cout<<"Error, Sodoku wasn't initialized properly "; return; } for (int i=0;i<rank;i++) { for (int j=0;j<rank;j++) cout<<setw(3)<<Sodoku[i][j]; cout<<endl; }} //Generate randome Sodoku base on basice Sodoku//Input is based Sodokuvoid RandomSodoku(int rank,int **&Sodoku){ srand((unsigned)time(NULL)); int row1=rand()%rank; int row2=rand()%rank; int col1=rand()%rank; int col2=rand()%rank; //Swapping row1 with row2 for (int i=0;i<rank;i++) { swap(Sodoku[row1][i],Sodoku[row2][i]); } //Swapping col1 with col2 for (int i=0;i<rank;i++) { swap(Sodoku[i][col1],Sodoku[i][col2]); }} void main(){ int **Sodoku=NULL; int rank=0; cout<<"Enter rank of sodoku = "; cin>>rank; cout<<"Base Sodoku "; CreateBaseSodoku(rank,Sodoku); Show(rank,Sodoku); while (getch()!=27) { cout<<"Randome Sodoku (Press Esc to quit) "; RandomSodoku(rank,Sodoku); Show(rank,Sodoku); } system("pause"); }
Thông qua phân tích dữ liệu Google từ 86 quốc gia, mới đây, một công ty tại Anh đã công bố bảng xếp hạng kích tấc "cậu nhỏ" của các nước trên thế giới. Kết quả, hầu hết các nước xếp ở nhóm đầu của...
"Chim" của chàng trai Việt thuộc...