日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

poj 3009 Curling 2.0 (dfs的应用)

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poj 3009 Curling 2.0 (dfs的应用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?http://poj.org/problem?id=3009

(1)這是一個用球撞石頭的游戲,撞到石頭,石碎球停。在規定的10次拋球機會下,若求移動到終點就贏,否則算輸了(出界直接算輸)。

(2)每一次的深搜都有四個方向,每個方向要一直走,直到出現以下狀況為止:

    1)剛要拋球,被墻擋住了(該情況不能拋球);

    2)? 出界;

    3)到達終點;

    4) 撞墻。

    其中只有第四種情況需要進行深搜,其他情況均不需要。(雖然這很顯然,但是案例

    通不過的基本上就是因為這個,千萬小心)。

(3)通過了所有案例,為什么還是WA??小心,注意輸入 n,m 順序問題。題中所給的案例

   恰好與n,m 的順序無關。。。這是挖好了陷阱等你呢。

(4)稍微注意: if(!n&&!m) break;

總的來說,這是一道不錯的dfs入門題。

具體代碼:

View Code #include<stdio.h> #include<string.h> #define Inf (1<<28) int n, m; int map[25][25]; int dir[4][2]={1,0,0,1,-1,0,0,-1}; int px, py, ans; int dfs(int x, int y, int depth) {int i, j, k;if(depth>10) return 0;for(i=0;i<4;i++){int tx=x, ty=y, ex, ey;int g=0;for(j=0;;j=1){ex=tx+dir[i][0];ey=ty+dir[i][1];if(!j&&map[ex][ey]==1) break; //靠墻,不能投if(ex<=0||ex>n||ey<=0|ey>m) break; //出界if(map[ex][ey]==3) //終點 {if(ans>depth) ans=depth;return 0;}if(map[ex][ey]==1) {g=1; break;}//撞墻tx=ex; ty=ey;//球還在滾動中 }if(g){map[ex][ey]=0;dfs(tx, ty, depth+1); //下一步,只有撞墻的才算一步map[ex][ey]=1;}}return 0; } int main() {int i, j, k;while(scanf("%d%d", &m, &n)!=EOF, n||m) //注意 n, m 的順序 {for(i=1;i<=n;i++)for(j=1;j<=m;j++){scanf("%d", &map[i][j]);if(map[i][j]==2) {px=i;py=j;}}ans=Inf;dfs(px, py, 1);if(ans!=Inf) printf("%d\n", ans);else printf("-1\n");}return 0; }

?

?

?

轉載于:https://www.cnblogs.com/tim11/archive/2012/08/18/2645715.html

總結

以上是生活随笔為你收集整理的poj 3009 Curling 2.0 (dfs的应用)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。