• <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 冬天¤不回來 閱讀(980) 評論(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

            最新隨筆

            搜索

            •  

            積分與排名

            • 積分 - 39216
            • 排名 - 540

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久99这里有精品10| 国内精品免费久久影院| 久久久久亚洲AV无码专区首JN | 欧美亚洲另类久久综合婷婷| 国内精品久久久久久不卡影院| 久久人人爽人人爽AV片| AV无码久久久久不卡蜜桃| 97r久久精品国产99国产精| 国产日韩久久久精品影院首页| 亚洲中文字幕伊人久久无码| 久久精品一本到99热免费| 久久精品国产黑森林| 午夜人妻久久久久久久久| 东京热TOKYO综合久久精品| 国产成人精品久久亚洲高清不卡| 久久亚洲日韩看片无码| 精品久久久久久久中文字幕| 中文精品久久久久人妻不卡| 国产香蕉97碰碰久久人人| 久久综合狠狠综合久久| 热re99久久精品国99热| 九九久久精品国产| 亚洲精品高清国产一久久| 人妻精品久久无码区| 大香伊人久久精品一区二区| 久久99精品久久久久久不卡| 欧美亚洲另类久久综合| 久久精品午夜一区二区福利 | 久久久久久久久久久精品尤物| 99久久免费国产精品| 99久久婷婷国产一区二区| 久久九九有精品国产23百花影院| 麻豆一区二区99久久久久| 久久亚洲熟女cc98cm| 国产69精品久久久久久人妻精品| 亚洲国产精品无码久久青草| 久久亚洲电影| 久久久久久综合网天天| 久久午夜伦鲁片免费无码| 久久久一本精品99久久精品66| 日韩AV无码久久一区二区|