您的位置:首页 > 其它

POJ2965,递归出来的!

2016-04-27 21:47 344 查看
这道题不难,有很多种实现的方法,然而在看了结题报告后,我就看懂了一种!这里贴出java代码仅供参考!

import java.util.Scanner;

/*
*
这一题大意如下:
一个冰箱上有4*4共16个开关,改变任意一个开关的状态(即开变成关,关变成开)时,此开关的同一行、同一列所有的开关都会自动改变状态。要想打开冰箱,要所有开关全部打开才行。
输入:一个4×4的矩阵,+表示关闭,-表示打开;
   输出:使冰箱打开所需要执行的最少操作次数,以及所操作的开关坐标。
+ 为关闭状态
- 为打开状态
求在4*4的棋盘中最快调整为 全部打开状态的最少步骤 并输出 要调整的坐标
偶数次操作等于0 次操作 ,
奇数次操作等于 1次操作
所以 每个开关的操作次数为一次
*
* */
public class poj2965 {
static boolean[][] visited = new boolean[4][4];
static char[][] map;
static int[] is=new int[16];
static int[] js=new int[16];
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String[] old = new String[4];
for (int i = 0; i < old.length; i++) {
old[i] = sc.nextLine();
}
map = new char[4][4];
for (int i = 0; i < old.length; i++) {
map[i] = old[i].toCharArray();
}
caozuo(map);
int count = 0;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (visited[i][j]) {
is[count]=i+1;
js[count]=j+1;
count++;
}
}
}
System.out.println(count);
for (int i = 0; i < count; i++) {
System.out.println(is[i]+" "+js[i]);
}

}

private static void sop(int[][] arr) {
// TODO Auto-generated method stub
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
System.out.print(arr[i][j]);
}
System.out.println();
}
}

private static void caozuo(char[][] map) {
// TODO Auto-generated method stub
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (map[i][j] == '+') {
visited[i][j] = !visited[i][j];
for (int k = 0; k < 4; k++) {
visited[i][k] = !visited[i][k];
visited[k][j] = !visited[k][j];

}
}

}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: