• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            BillyYu

            Puzzle Fifteen練習 CS50

            關(guān)于什么是PuzzleFifteen,參看WIKIPEDIA。
            貼下我自己寫的代碼,現(xiàn)在只能是將倒著的順過來,還不知道如何初始化任意的可解的棋局及如何自動破解,歡迎大蝦能提點下。
            /***************************************************************************
             * fifteen.c
             *
             * Computer Science 50
             * Problem Set 3
             *
             * Implements The Game of Fifteen (generalized to d x d).
             *
             * Usage: fifteen d
             *
             * whereby the board's dimensions are to be d x d,
             * where d must be in [DIM_MIN,DIM_MAX]
             *
             * Note that usleep is obsolete, but it offers more granularity than
             * sleep and is simpler to use than nanosleep; `man usleep` for more.
             **************************************************************************
            */
             
            #define _XOPEN_SOURCE 500

            #include 
            <cs50.h>
            #include 
            <stdio.h>
            #include 
            <stdlib.h>
            #include 
            <time.h>
            #include 
            <unistd.h>


            // constants
            #define DIM_MIN 3
            #define DIM_MAX 9


            // global board
            int board[DIM_MAX][DIM_MAX];
            int d;


            // prototypes
            void clear();
            void greet();
            void init();
            void draw();
            bool move();
            bool won();


            int
            main(
            int argc, char *argv[])
            {
                
            // ensure proper usage
                if (argc != 2)
                {
                    printf(
            "Usage: %s d\n", argv[0]);
                    
            return 1;
                }

                
            // greet user with instructions
                greet();

                
            // ensure valid dimensions
                d = atoi(argv[1]);
                
            if (d < DIM_MIN || d > DIM_MAX)
                {
                    printf(
            "Board must be between %d x %d and %d x %d, inclusive.\n",
                           DIM_MIN, DIM_MIN, DIM_MAX, DIM_MAX);
                    
            return 2;
                }

                
            // initialize the board
                init();

                
            // accept moves until game is won
                while (true)
                {
                    
            // clear the screen
                    clear();

                    
            // draw the current state of the board
                    draw();

                    
            // check for win
                    if (won())
                    {
                        printf(
            "ftw!\n");
                        
            break;
                    }

                    
            // prompt for move
                    printf("Tile to move: ");
                    
            int tile = GetInt();

                    
            // move if possible, else report illegality
                    if (!move(tile))
                    {
                        printf(
            "\nIllegal move.\n");
                        usleep(
            500000);
                    }

                    
            // sleep thread for animation's sake
                    usleep(500000);
                }

                
            // that's all folks
                return 0;
            }


            /*
             * void
             * clear()
             *
             * Clears screen using ANSI escape sequences.
             
            */

            void
            clear()
            {
                printf(
            "\033[2J");
                printf(
            "\033[%d;%dH"00);
            }


            /*
             * void
             * greet()
             *
             * Greets player.
             
            */

            void
            greet()
            {
                clear();
                printf(
            "WELCOME TO THE GAME OF FIFTEEN\n");
                usleep(
            2000000);
            }


            /*
             * void
             * init()
             *
             * Initializes the game's board with tiles numbered 1 through d*d - 1
             * (i.e., fills 2D array with values but does not actually print them).  
             
            */

            void
            init()
            {
                
            // TODO
                for(int i = 0; i < d; i++)
                    
            for(int j = 0; j < d; j++)    
                        
            // do NOT initialize board[d-1][d-1]
                        if((i != d - 1|| (j != d - 1))
                            board[i][j] 
            = (d - i) * d - j - 1;
                        
            if(d % 2 == 0)
                        {
                            board[d
            -1][d-2= 2;
                            board[d
            -1][d-3= 1;
                        }
            }


            /* 
             * void
             * draw()
             *
             * Prints the board in its current state.
             
            */

            void
            draw()
            {
                
            // TODO
                for(int i = 0; i < d; i++)
                {
                    
            for(int j = 0; j < d; j++)
                    {
                        
            if((board[i][j] == 0))
                            printf(
            "  \t");
                        
            else
                            printf(
            "%2d\t",board[i][j]);
                    }
                    printf(
            "\n");
                }
            }


            /* 
             * bool
             * move(int tile)
             *
             * If tile borders empty space, moves tile and returns true, else
             * returns false. 
             
            */

            bool
            move(
            int tile)
            {
                
            // TODO
                
            //First found the 'tile'
                for(int i = 0; i < d; i++)
                    
            for(int j = 0; j < d; j++)
                        
            if(board[i][j] == tile)
                        {
                            
            //validity check
                            
            //Check up
                            if(i - 1 >= 0)
                                
            if(board[i-1][j] == 0)
                                {
                                    board[i
            -1][j] = board[i][j];
                                    board[i][j] 
            = 0;
                                    
            return true;
                                }

                            
            //Check down
                            if(i + 1 < d)
                                
            if(board[i+1][j] == 0)
                                {
                                    board[i
            +1][j] = board[i][j];
                                    board[i][j] 
            = 0;
                                    
            return true;
                                }

                            
            //Check left
                            if(j - 1 >= 0)
                                
            if(board[i][j-1== 0)
                                {
                                    board[i][j
            -1= board[i][j];
                                    board[i][j] 
            = 0;
                                    
            return true;
                                }

                            
            //Check right
                            if(j + 1 < d)
                                
            if(board[i][j+1== 0)
                                {
                                    board[i][j
            +1= board[i][j];
                                    board[i][j] 
            = 0;
                                    
            return true;
                                }
                        }
                
            return false;
            }


            /*
             * bool
             * won()
             *
             * Returns true if game is won (i.e., board is in winning configuration), 
             * else false.
             
            */

            bool
            won()
            {
                
            // TODO
                static int solved[DIM_MAX][DIM_MAX];
                
            static int once = 0;
                
            if(once == 0)
                {
                    
            for(int i = 0; i < d; i++)
                           
            for(int j = 0; j < d; j++)
                               
            // do NOT initialize board[d-1][d-1]
                            if((i != d - 1|| (j != d - 1))
                                   solved[i][j] 
            = i * d + j + 1;
                    once 
            ++;
                }

                
            for(int i = 0; i < d; i++)
                    
            for(int j = 0; j < d; j++)
                        
            if(board[i][j] != solved[i][j])
                            
            return false;
                
            return true;
            }


            posted on 2011-01-26 00:24 志華 閱讀(1467) 評論(1)  編輯 收藏 引用 所屬分類: C/C++

            評論

            # re: Puzzle Fifteen練習 CS50[未登錄] 2014-05-04 14:41 kris

            學CS50的時候?qū)W到week3 做習題的時候頓覺得好難

            包括即使在做init的時候都一直出錯,google了一下看到你的答案覺得很好,還在研究測試中,感謝!  回復(fù)  更多評論   

            <2014年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            導(dǎo)航

            統(tǒng)計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            文章檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            精品伊人久久大线蕉色首页| 品成人欧美大片久久国产欧美...| 99久久这里只有精品| 久久这里的只有是精品23| 欧美亚洲另类久久综合婷婷| 99久久精品国产一区二区蜜芽| 欧美激情精品久久久久| 国产精品99久久久久久人| 精品一区二区久久久久久久网站| 无码久久精品国产亚洲Av影片| 色综合久久无码五十路人妻| 无遮挡粉嫩小泬久久久久久久| 欧美va久久久噜噜噜久久| 久久99精品久久久久子伦| 国产亚洲欧美成人久久片 | 亚洲级αV无码毛片久久精品| 久久综合亚洲色一区二区三区| 久久久亚洲欧洲日产国码是AV| 亚洲精品乱码久久久久久自慰| 亚洲色欲久久久综合网| 97热久久免费频精品99| 久久国产视屏| 国内精品久久久久影院薰衣草| 久久青青草原亚洲av无码app | 99久久免费只有精品国产| 久久香蕉国产线看观看猫咪?v| 久久精品国产亚洲av麻豆图片| 伊人久久大香线蕉AV色婷婷色| 成人资源影音先锋久久资源网| 国产亚洲精久久久久久无码AV| 久久丫忘忧草产品| 国产成人99久久亚洲综合精品 | 伊人久久精品影院| 国产精品久久久亚洲| 久久夜色精品国产www| 新狼窝色AV性久久久久久| 99久久精品无码一区二区毛片 | 91精品国产色综合久久| 久久久WWW成人免费精品| 久久无码人妻一区二区三区| 久久久WWW成人|