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

Đề tài: sodoku (Lưu ý: Tiêu đề không rõ ràng)

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

    Mặc định sodoku (Lưu ý: Tiêu đề không rõ ràng)

    có bạn nào giải bài này bằng turbo c không ?

    các bạn xem thử bài này mình làm nhé thật ra không dài như thế này. chỉ cần hai hàm (kiểm tra lổi và một hàm dùng thuật toán đệ quy có quay lui là được). ô nào trống nhập số 0 các bạn thử xem và cho ý kiến nhé.

    PHP Code:
    //GIAI TOAN SODOKU
    #include<stdio.h>
    #include<stdlib.h>
    #include<conio.h>
    //cac bien dung trong moi ham
    int a[10][10],mausac[10][10],tt[100],cl[10]={1,2,3,4,5,6,7,8,9};//khoi tao so con lai cua o
    int hang,cot,o,dau,cuoi;
    //***************************************************************************************
    //mausac dung de in hai mau chu khac nhau de de phan biet
    void mau()
    {
    int i,j;
    for (
    i=0;i<=8;i++)
        for (
    j=0;j<=8;j++)
            if(
    a[i][j]==0)
                
    mausac[i][j]=1;
    }
    //*********************************************************************************
    //ham tim toa do cua mot o theo hang va cot
    void toado(const int i,const int j)
    {
    //i: hang,j: cot phai nho hon 9 va lon hon 0
    hang=i;
    cot=j;
    if(
    j<3&&i<3o=1;
    else if(
    j<6&&i<3o=2;
    else if(
    j<9&&i<3o=3;
    else if(
    j<3&&i<6o=4;
    else if(
    j<6&&i<6o=5;
    else if(
    j<9&&i<6o=6;
    else if(
    j<3&&i<9o=7;
    else if(
    j<6&&i<9o=8;
    else if(
    j<9&&i<9o=9;
    }
    //************************************************************************************
    //ham xoa mot phan tu trong mang ,ham dung cung voi ham conlai
    void xoa(int*mang,const int vt)
    {
    *(
    mang+vt-1)=0;//gia tri cua mang o vi tri la so 0
    }
    //ket qua cua ham tra ve mang mphu la cac so khong co trong mang mkiemtra
    void conlai(int*mphu,const*mkiemtra)
    {
    int i,n;
    for(
    i=0;i<9;i++)
        switch(
    mkiemtra[i])
        {
            case 
    1:xoa(mphu,1);break;
            case 
    2:xoa(mphu,2);break;
            case 
    3:xoa(mphu,3);break;
            case 
    4:xoa(mphu,4);break;
            case 
    5:xoa(mphu,5);break;
            case 
    6:xoa(mphu,6);break;
            case 
    7:xoa(mphu,7);break;
            case 
    8:xoa(mphu,8);break;
            case 
    9:xoa(mphu,9);break;
        }
    }
    //******************************************************************************************
    //ham tinh gia tri con lai co the co  cua mot o
    void giatrio(const int x,const int y)
    {
    int mhang[10],mcot[10],mo[10],m,n,k=0,i,j;
    toado(x,y);
    for(
    i=0;i<=8;i++)
        
    mhang[i]=a[hang][i],mcot[i]=a[i][cot];//tao cac giatri cho mang
    switch(o)
    {
        case 
    1:n=0,m=0;break;
        case 
    2:n=0,m=3;break;
        case 
    3:n=0,m=6;break;
        case 
    4:n=3,m=0;break;
        case 
    5:n=3,m=3;break;
        case 
    6:n=3,m=6;break;
        case 
    7:n=6,m=0;break;
        case 
    8:n=6,m=3;break;
        case 
    9:n=6,m=6;break;
    }
    for(
    i=n;i<n+3;i++)
        for(
    j=m;j<m+3;j++)
            
    mo[k]=a[i][j],k++;
    //bat dau tim nhung so con lai cua o
    conlai(cl,mhang);
    conlai(cl,mcot);
    conlai(cl,mo);
    }
    //*******************************************************************************************
    //ham phu kiem tra loi
    int loi(const int*mang)
    {
    int i=0,j=0,kt=0;
    while(
    kt==0&&i<9)
    {
        while(
    kt==0&&j<9)
        {
            if(
    mang[i]==mang[j]&&i!=j&&mang[i]!=0)
                
    kt=1;
            
    j++;
        }
        
    j=0;
        
    i++;
    }
    return 
    kt;
    }
    //*******************************************************************************************
    //ham chinh ket qua tra ve cua ham la mot so 1 nieu mang khong thoa man
    //nguoc lai ham tra ve so 0 khi thoa man cac dieu kien
    int kiemtraloi()
    {
    int i=0,j=0,tb=0,mp[10],kt=1,k=0,n,m;
    //kiem tra loi tren mot hang
    while(i<9&&tb==0)
    {
        for(
    j=0;j<=8;j++)
            
    mp[j]=a[j][i];
        if(
    loi(mp)==1)
            
    tb=1;
        else
            
    i++;
    }
    //kiem tra loi tren mot cot
    i=0;
    while(
    i<9&&tb==0)
    {
        for(
    j=0;j<=8;j++)
            
    mp[j]=a[i][j];
        if(
    loi(mp)==1)
            
    tb=1;
        else
            
    i++;
    }
    //kiem tra loi trong o
    while(tb==0&&kt<=9)
    {
        switch(
    kt)
        {
            case 
    1:n=0,m=0;break;
            case 
    2:n=0,m=3;break;
            case 
    3:n=0,m=6;break;
            case 
    4:n=3,m=0;break;
            case 
    5:n=3,m=3;break;
            case 
    6:n=3,m=6;break;
            case 
    7:n=6,m=0;break;
            case 
    8:n=6,m=3;break;
            case 
    9:n=6,m=6;break;
        }
        for(
    i=n;i<n+3;i++)
            for(
    j=m;j<m+3;j++)
                
    mp[k]=a[i][j],k++;
        if(
    loi(mp)==1)
            
    tb=1;
        else
            
    kt++,k=0;
    }
    return 
    tb;
    }
    //******************************************************************************************
    //ham in toa do cua mang len man hinh
    void inmang(const int k[10][10],int x,int y,int time)
    {
    int i,j,hoanh=y,tung=x;
    for(
    i=0;i<=8;i++)
    {
        for(
    j=0;j<=8;j++)
        {
            
    hoanh=hoanh+3;
            if(
    mausac[i][j]==1)
                
    textcolor(WHITE);
            else 
    textcolor(YELLOW);
                
    gotoxy(hoanh,tung+2),cprintf("%d",k[i][j]);
            
    delay(time);
        }
        
    hoanh=y;
        
    tung=tung+2;
    }
    }
    //*******************************************************************************************
    //ham dung de dien vao o khi o chi co mot gia tri
    void tinh()
    {
    int i,j,p,k,lap,dem=1;
    do
    {
        
    lap=0;
        for(
    i=0;i<=8;i++)
            for(
    j=0;j<=8;j++)
                if (
    a[i][j]==0)
                {
                    
    giatrio(i,j);
                
    //sau ham nay se tra ve mang clai
                    
    for(k=0;k<=8;k++)
                        if(
    cl[k]!=0)
                            
    dem+=1;
                    if(
    dem==1)
                    {
                        
    k=0;
                        while(
    cl[k]==0k++;
                            
    a[i][j]=cl[k],lap=1;
                                
    // bien 'lap' dung de kiem tra xem chuong trinh co tiep tuc lap hay khong
                    
    }
                    
    dem=0;
                    
    //khoi tao lai mang cl[]
                    
    for(k=0;k<=8;k++)
                        
    cl[k]=k+1;
                }
    }
    while(
    lap==1);
    //vong lap ket thuc khi khong con o nao co mot gia tri
    }
    //******************************************************************************************
    //dung de doc mot file da co san
    void docfile(char *save)
    {
    FILE *f;
    int i,j;
    if((
    f=fopen(save,"rt"))==NULL)
        
    clrscr(),printf("* FILE KHONG TON TAI !!!"),getch(),exit(0);
    for(
    i=0;i<=8;i++)
        for(
    j=0;j<=8;j++)
            
    a[i][j]=fgetc(f);
    fclose(f);
    }

    //********************************************************************************************
    //ham dung de nhap hien thi va ghi file len dia khi da nhap xong
    void ghifile()
    {
    FILE *f;
    int i,j,hoanh=1,tung=1,a[10][10],so;
    char c;
    clrscr();
    for (
    i=1;i<=9;i++)
        
    hoanh=hoanh+3gotoxy(hoanh,tung),printf("%d",i);
    hoanh=1;
    for (
    i=1;i<=9;i++)
        
    tung=tung+2gotoxy(hoanh,tung),printf("%d",i);
    hoanh=tung=1;
    for(
    i=1;i<=9;i++)
    {
        for(
    j=1;j<=9;j++)
        {
            
    gotoxy(1,23);
            
    printf("                              \n                          \n                             ");
            
    gotoxy(1,23);
            
    printf("[%d][%d]= ",i,j);
            
    scanf("%d",&a[i][j]);
            
    hoanh=hoanh+3;
            
    gotoxy(hoanh,tung+2),printf("%d",a[i][j]);
        }
        
    hoanh=1;
        
    tung=tung+2;
    }
    do
    {
        do
        {
            
    gotoxy(1,23),printf("* BAN CO MUON SUA KHONG :c/k ");
            
    c=toupper(getch());
            
    gotoxy(1,23),printf("                                    ");
        }while(
    c!='C'&&c!='K');
        if(
    c=='C')
        {
            
    gotoxy(1,23),printf("I= "),scanf("%d",&i);
            
    gotoxy(1,23),printf("                               ");
            
    gotoxy(1,23),printf("J= "),scanf("%d",&j);
            
    gotoxy(1,23),printf("[%d][%d]= ",i,j),scanf("%d",&a[i][j]);
            
    hoanh=tung=1;
            for(
    i=1;i<=9;i++)
            {
                for(
    j=1;j<=9;j++)
                    {
                        
    hoanh=hoanh+3;
                        
    gotoxy(hoanh,tung+2),printf("%d",a[i][j]);
                     }
                
    hoanh=1;
                
    tung=tung+2;
            }
        }
    }while(
    c!='K');
    if((
    f=fopen("save.txt","wt"))==NULL)
        
    clrscr(),printf("DIA DAY HOAC CHONG GHI, COPY CHUONG TRINH VAO DIA KHAC VA TIEP TUC"),getch(),exit(0);
    for(
    i=1;i<=9;i++)
        for(
    j=1;j<=9;j++)
            
    fprintf(f,"%c",a[i][j]);
    fclose(f);
    }
    //*************************************************************************************************
    //ham se kiem tra nhung o co the thay doi gia tri tren mang a[][]
    //ket qua ham tra ve mang tt[] (thong tin) voi gia tri 1 nieu duoc thay doi
    void thongtin()
    {
    int i,j,k=0,d=0;
    for(
    i=0;i<=8;i++)
        for(
    j=0;j<=8;j++)
        {
            
    d++;
            if(
    a[i][j]==0)
                
    k++,tt[k]=d;
        }
    }
    //*********************************************************************************
     //kiem tra so dau tien va so cuoi cung can dien
    void daucuoi()
    {
    int i=1,kt=0;
    while(
    kt==0&&i<=81)
        if(
    tt[i]==0)
            
    cuoi=i,kt=1;
        else
            
    i++;
    dau=0;
    }
    //*************************************************************************************************
    //ham quan trong nhat trong chuong trinh
    //ham su dung phuong phap de quy co quay lai
    void thuso(int so)
    {
    int k;
    int kq;
    int i=0,j=0,dk=0,bt=0,m,n;
    kq=tt[so];
    while(
    dk==0&&i<9)
    {
        while(
    dk==0&&j<9)
        {
            
    bt++;
            if(
    bt==kq)
                
    dk=1,n=i,m=j;
            else 
    j++;
        }
        
    i++,j=0;
    }
    if (
    so<=dau)
    {
        
    gotoxy(1,23),printf("* XIN GOI BAI NAY CHO TOI THEO DIA CHI EMAIL TREN, AN ENTER DE KET THUC ");
        
    getch(); exit(0);
    }
    else if(
    so>=cuoi)
    {
        
    inmang(a,2,40,20);
        
    gotoxy(1,23),printf("** THANH CONG **  AN ENTER DE KET THUC !!!   "),getch(),exit(0);
    }
    else
    {
        for(
    k=1;k<=9;k++)
        {
            
    a[n][m]=k;
            if(
    kiemtraloi()==0)
                
    thuso(so+1);
            
    a[n][m]=0;
        }
    }
    }
    //---------------------------------------------------------------------------------------------------------------
    void main()
    {
    char so;
    clrscr();
    printf("\
     ---MENU---\n\
     1: Tu nhap so\n\
     2: Doc file save.txt co san\n\
     !: So khac de ket thuc\n\n\
     chon: \
     "
    );
    so=toupper(getch());
    clrscr();
    if(
    so==49)
        
    ghifile();
    else if(
    so!=49&&so!=50) exit(0);
    docfile("save.txt");
    clrscr();
    gotoxy(10,1);
    printf("--- DE BAI ---");
    gotoxy(48,1);
    printf("--- KET QUA ---");
    mau();//kiem tra mau sac cua chu truoc khi in
    inmang(a,2,1,1);//in mang de bai
    gotoxy(1,23),printf("* XIN CHO, CHUONG TRINH DANG TINH ...");
    tinh();
    inmang(a,2,40,20);//in mang ket qua
    if(kiemtraloi()==1)
    {
        
    gotoxy(1,23),printf("* BAN NHAP SO SAI, AN PHIM ENTER DE KET THUC    ");
        
    getch(); exit(0);
    }
    else
    {
        
    thongtin();
        
    daucuoi();
        
    thuso(1);
    }

    Lưu ý: Vui lòng không gửi liên tiếp, liền nhau nhiều bài viết trong cùng một đề tài.
    Đã được chỉnh sửa lần cuối bởi Kevin Hoang : 18-01-2008 lúc 12:35 PM. Lý do: Nhắc nhở

  2. #2
    Ngày gia nhập
    12 2007
    Bài viết
    5

    chương trình này muốn chạy được bạn thêm 2 thư viện là "dos.h" và "ctype.h"

  3. #3
    Ngày gia nhập
    01 2008
    Bài viết
    3

    không cần hai thư viện này cũng chạy được mà

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

    Bạn làm được cả 1 bài lớn thế này, mà bài tính tổng 35 lại làm không được ? Bạn thật biết đùa !!

  5. #5
    Ngày gia nhập
    01 2008
    Bài viết
    140

    đùa chi bạn bài đó mình làm được nhưng chỉ có thể ra được một kết quả nên hỏi các bác xem có cách nào hay có thể in ra được nhiều kết quả.
    bài tính tổng 35 ???
    ly:ath(tdtanvn)
    "
    "_____
    _____<//v
    _____,>\_
    ___giã từ .NET

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

  1. Thẻ ưu đãi tiêu dùng quanh năm tiết kiệm tới 60% nhu cầu tiêu dùng nào!
    Gửi bởi chuyengia_td 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: 15-08-2013, 12:24 PM
  2. làm thế nào khi chọn nào tiêu đề thì hiện lên nội dung chi tiết về tiêu đề đó
    Gửi bởi thuan trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 2
    Bài viết cuối: 11-08-2011, 07:18 AM
  3. Nhật ký chi tiêu | Chương trình quản lý chi tiêu
    Gửi bởi AnhPham trong diễn đàn Dự án & Source code C#, ASP.NET
    Trả lời: 11
    Bài viết cuối: 09-05-2011, 07:56 PM
  4. Phần mềm C++ | Chương trình giải Sodoku
    Gửi bởi mushu trong diễn đàn Ý tưởng sản phẩm CNTT của bạn
    Trả lời: 5
    Bài viết cuối: 09-04-2009, 05:11 PM
  5. Sách nói về gải Sodoku
    Gửi bởi vtien_uit trong diễn đàn Tài liệu, ebooks và công cụ
    Trả lời: 1
    Bài viết cuối: 28-02-2008, 10:47 PM

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