zoukankan      html  css  js  c++  java
  • 洛谷P1162填涂颜色

    【题目描述】
    由数字0组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向。现要求把闭合圈内的所有空间都填写成2.例如:6 6×6的方阵(n=6),涂色前和涂色后的方阵如下:

    0 0 0 0 0 0
    0 0 1 1 1 1
    0 1 1 0 0 1
    1 1 0 0 0 1
    1 0 0 0 0 1
    1 1 1 1 1 1

    0 0 0 0 0 0
    0 0 1 1 1 1
    0 1 1 2 2 1
    1 1 2 2 2 1
    1 2 2 2 2 1
    1 1 1 1 1 1
    输入格式
    每组测试数据第一行一个整数n(1≤n≤30)

    接下来n行,由0和1组成的n×n的方阵。

    方阵内只有一个闭合圈,圈内至少有一个0。

    输出格式
    已经填好数字2的完整方阵。

    输入输出样例
    输入
    6
    0 0 0 0 0 0
    0 0 1 1 1 1
    0 1 1 0 0 1
    1 1 0 0 0 1
    1 0 0 0 0 1
    1 1 1 1 1 1
    输出
    0 0 0 0 0 0
    0 0 1 1 1 1
    0 1 1 2 2 1
    1 1 2 2 2 1
    1 2 2 2 2 1
    1 1 1 1 1 1
    说明/提示
    1≤n≤30

    先上代码:

    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.Scanner;
    public class Main {
    		static int[][]vis = new int[40][40];
    		static int [][]map = new int[40][40];
    		static Queue<Integer> qx = new LinkedList<Integer>(); 
    		static Queue<Integer> qy = new LinkedList<Integer>(); 
    		static int []dx = {1,0,-1,0};
    		static int []dy = {0,1,0,-1};
    		static int n;
    		public static boolean inmap(int x,int y)
    		{
    			return(x>=0&&x<=n+1&&y>=0&&y<=n+1);
    		}
    		public static void bfs(int x,int y)
    		{
    			while(!qx.isEmpty())//不为空的状态下
    			{
    				for (int i = 0; i < 4; i++) {
    					int xx = qx.peek()+dx[i];
    					int yy = qy.peek()+dy[i];
    					if(inmap(xx,yy)&&vis[xx][yy]!=1&&map[xx][yy]!=1)
    					{
    						qx.offer(xx);
    						qy.offer(yy);
    						vis[xx][yy] = 1;
    					}
    				}
    				qx.poll();
    				qy.poll();
    			}
    		}
    		public static void main(String[] args) {
    				Scanner s = new Scanner(System.in);
    				n = s.nextInt();
    				for (int i = 1; i <= n; i++) {
    					for (int j = 1; j <= n; j++) {
    						map[i][j] = s.nextInt();
    					}
    				}
    				qx.offer(0);
    				qy.offer(0);
    				vis[0][0] = 1;//标记这个点已经走过
    				bfs(0,0);
    				for (int i = 1; i <= n; i++) {
    					for (int j = 1; j <= n; j++) {
    						if(vis[i][j]==0&&map[i][j]==0)
    						{
    							System.out.print(2+" ");
    						}
    						else
    						{
    							System.out.print(map[i][j]+" ");
    						}
    					}
    					System.out.println();
    				}
    	}
    
    }
    

    作者:Better又
    出处:https://www.cnblogs.com/lwyy1223-/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    POJ NOI MATH-7650 不定方程求解
    POJ NOI MATH-7656 李白的酒
    POJ NOI MATH-7654 等差数列末项计算
    POJ NOI MATH-7827 质数的和与积
    POJ NOI MATH-7830 求小数的某一位
    POJ NOI MATH-7833 幂的末尾
    POJ NOI MATH-7829 神奇序列求和
    POJ NOI MATH-7826 分苹果
    UVALive5661 UVA668 ZOJ2037 Parliament
    POJ1032 Parliament
  • 原文地址:https://www.cnblogs.com/lwyy1223-/p/12604580.html
Copyright © 2011-2022 走看看