Uva572 (java版)

题目就是求连通块的一个题,理解题目意思后就会显得比较简单
1:
我们要理解什么是连通块,连通块就是只有有2个@连在一起就是属于同一个连通块,就是要我们求输入的图中有多少个连通块。
2:
在我们需要多次输入数据时,我们可以这样:

import java.util.*;
public class Uva572 {
 char a[][]; // 保存油田
 boolean c[][]; // 是否访问
 public static void main(String args[]) {
  int m, n; // 行 列
  Uva572 t = new Uva572();
  Scanner sc = new Scanner(System.in);
  m = sc.nextInt();
  n = sc.nextInt();
  while (m >= 0 && n >= 0) {
   int count = 0;
   t.a = new char[m][n];
   t.c = new boolean[m][n];
   for (int i = 0; i < m; i++) {
    String b = sc.next();
    t.a[i] = b.toCharArray(); // 输入完成
   }
   for (int i = 0; i < m; i++)
    for (int j = 0; j < n; j++)
     t.c[i][j] = false; // 初始为未被初始化
     for (int i = 0; i < m; i++) {
    for (int j = 0; j < n; j++) {
     if (!t.c[i][j] && t.a[i][j] == '@') {
      count++;
      t.DFS(i,j);
     }
    }
   }
   System.out.println(count);
   m = sc.nextInt();
   n = sc.nextInt();
  }
 }
 public void DFS(int i, int j) {
  try {
   if (c[i][j]  || a[i][j] != '@') // 已访问或不是@
    return;
   c[i][j] = true;
   for (int x = -1; x <= 1; x++)
    for (int y = -1; y <= 1; y++)
     if (x != 0 || y != 0)
      DFS(x+i, y+j);
  } 
  catch (Exception e) { // 出界则返回
   return;
  }
 }
}
发布了32 篇原创文章 · 获赞 5 · 访问量 862

猜你喜欢

转载自blog.csdn.net/shizhuba/article/details/103036836
今日推荐