• <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>
            冬天¤不回來
            海風輕輕吹過我的臉龐 陽光溫柔的灑在我身上 海鷗自由的飛在天空中像 快樂的徘徊在游樂場 白云在偷看彩虹的模樣 海洋總為那船長指方向 海浪撫摸著沙灘的衣裳 我也每天都為他換上新裝 找到方向 揭開迷茫 學著堅強 努力去闖!
            posts - 20,  comments - 90,  trackbacks - 0

            ⒈ 用計算機模擬"迷宮問題",求出其中的一條通路.用數組MAZE(?1..M,1..N)表示迷宮,數組元素為1意味著死路,為0表示通路,MAZE(1,1)為迷宮入口,MAZE(M,N)為迷宮出口.設計一個算法判別迷宮問題是否有解,有解則打印出一條路徑.

            //////大家來做做吧,看起來很有味哦///////

            posted on 2006-09-26 12:28 冬天¤不回來 閱讀(981) 評論(8)  編輯 收藏 引用

            FeedBack:
            # re: 趣味試題⒈
            2006-09-26 12:41 | beyonlin
            深度優先搜索~~  回復  更多評論
              
            # re: 趣味試題⒈
            2006-09-26 13:01 | 冬天¤不回來
            明天給出答案,大家做做撒,寫到回復里就行了  回復  更多評論
              
            # re: 趣味試題⒈
            2006-09-27 19:00 | Optimistic
            //本程序求解<迷宮指路>
            //By Optimistic

            Q1:如何設計程序數據?
            A1:一般我們用一個2維數組表示這個迷宮 0代表路 1代表墻

            Q2:從A點搜到B點 再搜B點 不又搜到A點了嗎?
            A1:當我們從A點搜到B點之后 A點就把0改成1 不就變成墻了嗎 就不會再搜回去了

            Q3:這樣不是只能搜到出口 但是不知道具體的路嗎?
            A1:有兩種解決的辦法
            1.從A點搜到B點 就記錄B點的前驅是A 這樣我們從出口一路找前驅就可以找到一條路 (本程序采用)
            2.我們搜的時候 記錄下從入口到此被搜結點的距離 這樣我們從出口一路找距離越來越小的結點
            也可以找到回入口的路

            Q4:要是搜到了邊界的0位置怎么辦呢?
            A1:自然的寫法是每次都判斷是不是到了邊界 不要邊界外的子結點
            比較有創意的寫法是給邊界外面加一道圍墻 即增設標記為"1"的附加方格(本程序采用)

            Q5:...
            A1:程序看不懂的地方可以直接來問我... 加油...
            */

            #include <stdio.h>

            const int M = 8, N = 8; //棋盤的行數 列數(默認為8*8的迷宮 可隨意改變)
            struct Point
            {
            int x, y; //方格在棋盤里的行和列
            };

            struct Queue
            {
            int front; //隊首
            int rear; //隊尾
            Point d[4*M*N]; //元素 這個范圍是我想了想定的 應該夠了
            }Q;

            int board[M+2][N+2]; //棋盤
            Point start, end; //起點和終點
            Point pre[M][N]; //記錄結點的前驅
            Point offset[4]; //相對位移

            bool findPath();
            void print();

            int main()
            {
            // freopen("BFS.in", "r", stdin);
            offset[0].x = 0, offset[0].y = 1;
            offset[1].x = 1, offset[1].y = 0;
            offset[2].x = 0, offset[2].y = -1;
            offset[3].x = -1, offset[3].y = 0;

            int i;
            printf("Enter the grid in row-major order:\n");
            for(i=1; i<=M; i++)
            for(int j=1; j<=N; j++)
            scanf("%d", &board[i][j]);
            printf("Enter the start position:\n");
            scanf("%d%d", &start.x, &start.y);
            printf("Enter the end position:\n");
            scanf("%d%d", &end.x, &end.y);

            if(findPath()) print();
            else printf("There is no such road from START to END.\n");

            return 0;
            }

            bool findPath() //搜索從start到end的一條通路 找到返回true 否則返回false
            {
            if(start.x == end.x && start.y == end.y)
            {
            pre[end.x][end.y] = end;
            return true;
            }
            //設置棋盤外一圈"圍墻"
            for(int i=0; i<=M+1; i++)
            {
            board[0][i] = board[M+1][i] = 1;
            board[i][0] = board[i][N+1] = 1;
            }

            Point cur = start; //current position
            Point np = start; //new position

            while(1)
            {
            for(i=0; i<4; i++)
            {
            np.x = cur.x + offset[i].x;
            np.y = cur.y + offset[i].y;
            if(board[np.x][np.y] == 0) //通路
            {
            pre[np.x][np.y] = cur;
            if((np.x == end.x) && (np.y == end.y)) break;
            Q.d[Q.rear] = np;
            Q.rear = (Q.rear+1)%(4*M*N);
            board[cur.x][cur.y] = 1;
            }
            }
            if((np.x == end.x) && (np.y == end.y)) break;
            if(Q.rear == Q.front) return false;
            cur = Q.d[Q.front];
            Q.front = (Q.front+1)%(4*M*N);
            }
            }

            void print()
            {
            printf("One path:\n");
            Point ans[M*N];
            int ansLen = 0;
            Point cur = end;
            ans[ansLen++] = cur;
            while(cur.x != start.x || cur.y != start.y)
            {
            cur = pre[cur.x][cur.y];
            ans[ansLen] = cur;
            ansLen++;
            }
            int i;
            for(i = ansLen-1; i>=0; i--)
            {
            printf("(%d,%d) ", ans[i].x, ans[i].y);
            if((i+1)%5==0) printf("\n");
            }
            printf("\n");
            }
            /*
            Sample Input:
            0 1 1 1 1 1 1 1
            0 0 1 1 1 1 1 1
            1 0 0 1 1 1 1 1
            1 1 0 0 1 1 1 1
            1 1 1 0 0 1 1 1
            1 1 1 1 0 0 1 1
            1 1 1 1 1 0 0 1
            1 1 1 1 1 1 0 0
            1 1
            8 8
            Sample Output:
            One Path:
            (1,1) (2,1) (2,2) (3,2) (3,3)
            (4,3) (4,4) (5,4) (5,5) (6,5)
            (6,6) (7,6) (7,7) (8,7) (8,8)
            */
              回復  更多評論
              
            # re: 趣味試題⒈
            2006-09-27 19:20 | 冬天¤不回來
            厲害.....看來真確答案不用我發了  回復  更多評論
              
            # re: 趣味試題⒈
            2006-11-09 11:17 | Asp
            這個不是CX同學專用版嗎?被我發現了……
            Optimistic??!!!!!!!!  回復  更多評論
              
            # re: 趣味試題⒈
            2006-11-11 23:19 | 冬天¤不回來
            CX不是OP~~~~  回復  更多評論
              
            # re: 趣味試題⒈
            2006-11-12 15:58 | 江水獸
            @冬天&#164;不回來
            @Asp
            CX是誰呀?  回復  更多評論
              
            # re: 趣味試題⒈
            2006-11-13 00:34 | 冬天¤不回來
            哈哈你去問問OP就曉得CX是誰拉~~~哈哈哇OHOH  回復  更多評論
              
            QQ:41696402

            <2006年9月>
            272829303112
            3456789
            10111213141516
            17181920212223
            24252627282930
            1234567

            常用鏈接

            留言簿(3)

            隨筆檔案

            文章檔案

            Programming

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 39260
            • 排名 - 540

            最新評論

            閱讀排行榜

            評論排行榜

            日本精品久久久久久久久免费| 国产精品青草久久久久婷婷 | 97久久精品人妻人人搡人人玩| 亚洲AV乱码久久精品蜜桃| 国产麻豆精品久久一二三| 色综合久久综精品| 97久久婷婷五月综合色d啪蜜芽| 久久久噜噜噜久久中文福利| 国产成人综合久久久久久| 日韩人妻无码精品久久免费一| 久久青青草原国产精品免费| 亚洲国产精品综合久久一线 | 久久精品国产一区二区电影| 精品熟女少妇AV免费久久 | 办公室久久精品| 久久人做人爽一区二区三区| 狠狠色丁香婷综合久久| 精品久久久久久无码不卡| 国产精品va久久久久久久| 精品国产乱码久久久久久1区2区| 一本大道久久东京热无码AV| 精品99久久aaa一级毛片| 精品国产福利久久久| 久久久噜噜噜www成人网| 久久久久久国产精品美女| 色婷婷综合久久久久中文字幕| 香蕉久久夜色精品国产小说| 亚洲国产精品无码久久久不卡| 99久久综合国产精品免费| 久久无码人妻精品一区二区三区| 99久久无码一区人妻| 国产精品一区二区久久| 成人国内精品久久久久影院| 狠狠色丁香久久婷婷综合五月 | 国产高清国内精品福利99久久| 国内精品久久人妻互换| 久久精品无码专区免费东京热| 久久婷婷五月综合97色一本一本 | 久久久精品久久久久久 | 亚洲午夜久久久久久久久电影网 | 欧美午夜A∨大片久久|