• <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

            關于什么是PuzzleFifteen,參看WIKIPEDIA。
            貼下我自己寫的代碼,現在只能是將倒著的順過來,還不知道如何初始化任意的可解的棋局及如何自動破解,歡迎大蝦能提點下。
            /***************************************************************************
             * 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 志華 閱讀(1468) 評論(1)  編輯 收藏 引用 所屬分類: C/C++

            評論

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

            學CS50的時候學到week3 做習題的時候頓覺得好難

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

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

            導航

            統計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            文章檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            久久精品中文字幕一区| 久久综合丁香激情久久| 色婷婷噜噜久久国产精品12p| 国产综合免费精品久久久| 久久99热这里只频精品6| 欧美黑人激情性久久| 99久久精品国产一区二区| 欧美久久亚洲精品| 看久久久久久a级毛片| 伊人久久大香线焦综合四虎| 久久久久久久综合狠狠综合| 久久超碰97人人做人人爱| 久久男人中文字幕资源站| 浪潮AV色综合久久天堂| 久久影视国产亚洲| 久久91精品国产91久久户| 久久精品卫校国产小美女| 国产精品日韩欧美久久综合| 一本色道久久综合亚洲精品| 久久国产成人精品国产成人亚洲| 久久国产免费观看精品3| 伊人久久大香线蕉AV色婷婷色 | 久久精品国产亚洲AV无码麻豆| 国产精品久久久天天影视香蕉| 人妻久久久一区二区三区| 亚洲精品tv久久久久| 国产叼嘿久久精品久久| 国内精品久久九九国产精品| 日韩精品无码久久久久久| 青春久久| 婷婷久久综合| 最新久久免费视频| 麻豆久久| 色诱久久av| 亚洲人成无码网站久久99热国产| 久久综合狠狠综合久久激情 | 久久er99热精品一区二区| 蜜臀久久99精品久久久久久小说| 亚洲午夜久久久久久噜噜噜| 亚洲午夜久久久久妓女影院 | 久久久久无码精品|