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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

杭电1241java实现dfs

發(fā)布時間:2025/3/20 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 杭电1241java实现dfs 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

問題描述
GeoSurvComp地質(zhì)調(diào)查公司負(fù)責(zé)檢測地下油藏。 GeoSurvComp一次與一個大的矩形區(qū)域一起工作,并創(chuàng)建一個網(wǎng)格,將網(wǎng)格劃分為多個方塊。然后分別分析每個地塊,使用傳感設(shè)備確定該地塊是否含有油。含油的情節(jié)被稱為口袋。如果兩個口袋相鄰,則它們是同一個油藏的一部分。油藏可能相當(dāng)大,可能含有大量的口袋。你的工作是確定網(wǎng)格中包含多少個不同的油藏。

輸入
輸入文件包含一個或多個網(wǎng)格。每個網(wǎng)格以含有m和n的行開始,網(wǎng)格中的行和列的數(shù)量由一個空格分隔。如果m = 0,則表示輸入結(jié)束;否則1 <= m <= 100和1 <= n <= 100.之后是每行有n行的m行(不包括行尾字符)。每個字符對應(yīng)一個圖,既可以代表沒有油的`*’,也可以代表一個油袋。

產(chǎn)量
對于每個電網(wǎng),輸出不同油量的數(shù)量。如果兩個不同的口袋是水平,垂直或?qū)窍噜彽?#xff0c;則它們是同一個油藏的一部分。一個油藏不會超過100個口袋。

示例輸入
1 1
*
3 5

  • @ * @ *
    ** ** @
  • @ * @ *
    1 8
    @@ **** @ *
    5 5
    **** @
  • @@ * @
  • @ ** @
    @@@ * @
    @@ ** @
    0 0

示例輸出
0
1
2
2
思路:剛開始我以為是常規(guī)搜索題,當(dāng)時想著遍歷,標(biāo)記,找相鄰的,周圍的,但是卻發(fā)現(xiàn)可能后出現(xiàn)的會連結(jié)已經(jīng)遍歷過的,并且那個油田也不好表示,不能超過100不好判斷。后來就看了別人學(xué)習(xí)了一下?lián)Q了一種思路,找到油田的那個點開始遍歷,遍歷周圍和他成為一個油田的所有滿足條件的(包括100),把遍歷過的點設(shè)為不可遍歷。找到一個@就dfs一次,油田數(shù)量就增加一次。注意參數(shù)的重置問題。
代碼如下:

import java.util.Scanner; public class 杭電1241 {static int d[][]= {{-1,0},{-1,1},{-1,-1},{0,1},{0,-1},{1,0},{1,-1},{1,1}};//八個方向static int m,n,number,value;static char a[][];public static void main(String[] args){Scanner sc=new Scanner(System.in);while(sc.hasNext()){m=sc.nextInt();//行n=sc.nextInt();//列if(m==0&&n==0)break;sc.nextLine();a=new char[m][n];for(int i=0;i<m;i ){String a1=sc.nextLine();a[i]=a1.toCharArray();} for(int i=0;i<m;i ){for(int j=0;j<n;j ){if(a[i][j]=='@'){a[i][j]='*';number=0;dfs(i,j);value ;}}}System.out.println(value);value=0;} }private static void dfs(int x1, int y1) {for(int i=0;i<8;i ) {if(x1 d[i][1]>=0&&x1 d[i][1]<m&&y1 d[i][0]>=0&&y1 d[i][0]<n)//不超屆;{if(a[x1 d[i][1]][y1 d[i][0]]=='@'&&number<100){a[x1 d[i][1]][y1 d[i][0]]='*';dfs(x1 d[i][1],y1 d[i][0]);}}} } }

總結(jié)

以上是生活随笔為你收集整理的杭电1241java实现dfs的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。