Advertisement
chaunhatlong

Xác định độ phức tạp của thuật toán

May 23rd, 2015
3,007
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <winbgim.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <cstdlib>
  6. #include <ctime>
  7. using namespace std ;
  8.  
  9. int a[121],mx[121],my[121];
  10. int n = 81;
  11. int color=4;
  12. int sdk=0;
  13. int last;
  14.  
  15. int Nhap();
  16. int Xuat();
  17. int Try(int i);
  18. int check(int i, int x);
  19. int findlast();
  20.  
  21. int main()
  22. {
  23.     initwindow(550,550);
  24.     setwindowtitle("Giai Sodoku");
  25.     setbkcolor(LIGHTGREEN) ;
  26.     cleardevice() ;
  27.     setcolor(BLACK) ;
  28.     settextstyle (3,VERT_DIR,2);
  29.     outtextxy(350,40,"PRESS ANY KEY");
  30.     int x=50,y=50;
  31.     for (x=50; x<=450; x+=50)
  32.     for (y=50; y<=450; y+=50)
  33.     rectangle(x,y,x+50,y+50);
  34.    Nhap();
  35.    last = findlast();
  36.    int i;
  37.    int x1=80,y1=90;
  38.    for (i=0; i<=81; i++)
  39.    {
  40.         char *s;
  41.         itoa(a[i],s,10);
  42.         if(x1==80+50*9) { x1=80;y1+=50;};
  43.         if (a[i]!=0){
  44.         outtextxy(x1,y1,s);
  45.         mx[i]=0;
  46.         my[i]=0;
  47.         }
  48.         else{
  49.             mx[i]=x1;
  50.             my[i]=y1;
  51.         }
  52.         x1+=50;
  53.    }
  54.    getch();
  55.    Try(0);
  56.    if(sdk) outtextxy(350,40,"SUCCESSFUL !!!"); else outtextxy(350,40,"DATA ERROR  !!!");
  57.    getch();
  58.    return 0;
  59. }
  60.  
  61. int Nhap()
  62. {
  63.    int i, tmp;
  64.    FILE *fp = NULL;
  65.    srand(time(NULL));
  66.    random:
  67.    int r = rand()%3;
  68.    printf("De: %d\n",r);
  69.    if (r==0){
  70.             fp = fopen("input.txt", "r");
  71.             }
  72.    else if(r==1){
  73.             fp = fopen("input1.txt", "r");
  74.             }
  75.     else if(r==2){
  76.             fp = fopen("input2.txt", "r");
  77.             }
  78.    else goto random;
  79.    for (i=0; i<81; i++)
  80.    {
  81.            fscanf(fp, "%d", &tmp);
  82.            a[i]= tmp;
  83.    }
  84.    fclose(fp);
  85.    return 0;
  86. }
  87.  
  88. int Xuat()
  89. {
  90.    int i;
  91.    for (i=0; i<81; i++)
  92.    {
  93.         if ( i%9 ==0) printf("\n");
  94.         printf(" %d", a[i]);
  95.        
  96.    }
  97.    return 0;
  98. }
  99.  
  100. int Try(int i)
  101. {
  102.    int x;
  103.    while (a[i]!=0)
  104.        i++;
  105.    for (x=1; x<=9; x++)
  106.        if (check(i, x))
  107.        {
  108.            a[i] = x;
  109.            if (i==last){
  110.                 sdk=1;
  111.                setcolor(color);
  112.                color+=1;
  113.                if(color==6) color=4;
  114.                 for(int d=0;d<81;d++)
  115.                 {
  116.                     char *s = new char[2];
  117.                     s[1]=0;
  118.                     if((mx[d]!=0)&&(my[d]!=0)) {
  119.                         s[0]=a[d]+0x30;
  120.                         outtextxy(mx[d],my[d],s);
  121.                         }
  122.                 }
  123.                 getch();
  124.                }
  125.            else
  126.                Try(i+1);
  127.            a[i] = 0;
  128.        }
  129.    return 0;
  130. }
  131.  
  132. int check(int i, int x)
  133. {
  134.    int k, t, t1, t2;
  135.    int kth, ktc, kto;
  136.    int tmpX, tmpY;
  137.    //kiem tra hang thu i da co cai nao trung chua
  138.    t1= i%9;
  139.    t2= i/9;
  140.     for (k=(t2*9); k<(t2*9+9); k++)
  141.        if (a[k] == x)
  142.            return 0;
  143.    //kiem tra cot thu j da co cai nao trung chua
  144.    for (k=0; k<9; k++)
  145.        if (a[k*9+t1] == x)
  146.            return 0;
  147.  
  148.    //kiem tra trong o 3x3
  149.    tmpX = t2%3; tmpY = t1%3;
  150.    for (k=t2-tmpX; k<=t2-tmpX+2; k++)
  151.        for (t=t1-tmpY; t<=t1-tmpY+2; t++)
  152.            if (a[k*9+t] == x)
  153.                return 0;
  154.    return 1;
  155. }
  156.  
  157. int findlast()
  158. {
  159.    int i;
  160.    for (i=81-1; i>=0;i--)
  161.             if (a[i]==0)
  162.             {
  163.                 return (i);
  164.             }
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement