代码:
public class P1 {
static int m=4,n=6; int[][] map= { {1,1,1,1,1,1}, {0,1,0,1,0,1}, {1,1,0,1,0,1}, {1,1,1,1,1,1} }; int dir[][]= {{1,0},{0,1},{-1,0},{0,-1}}; int arr[]=new int[m*n*m]; int length=0; void f1(int x,int y) { if(x==m-1&&y==n-1) { for(int i=0;i<length;i++) System.out.print(arr[i]+","+(i%2==0?"":" ")); System.out.println(); return; } for(int i=0;i<4;i++) { int x1=x+dir[i][0]; int y1=y+dir[i][1]; if(x1>=0&&x1<m&&y1>=0&&y1<n&&map[x1][y1]==1) { map[x1][y1]=2; arr[length++]=x1; arr[length++]=y1; f1(x1, y1); map[x1][y1]=1; length-=2; } } } public static void main(String[] a) { new P1().f1(0, 0); } }
输出:
0,1, 1,1, 2,1, 3,1, 3,2, 3,3, 3,4, 3,5,
0,1, 1,1, 2,1, 3,1, 3,2, 3,3, 2,3, 1,3, 0,3, 0,4, 0,5, 1,5, 2,5, 3,5,
0,1, 1,1, 2,1, 2,0, 3,0, 3,1, 3,2, 3,3, 3,4, 3,5,
0,1, 1,1, 2,1, 2,0, 3,0, 3,1, 3,2, 3,3, 2,3, 1,3, 0,3, 0,4, 0,5, 1,5, 2,5, 3,5,
0,1, 0,2, 0,3, 1,3, 2,3, 3,3, 3,4, 3,5,
0,1, 0,2, 0,3, 0,4, 0,5, 1,5, 2,5, 3,5, 数组
思路:
从起点向四个方向遍历,若是能够通行则该位置通行,存在数组arr中,并进行标注,若是走到终点输出arr中的值测试
6x6的方格,沿着格子的边线剪开成两部分。
要求这两部分的形状彻底相同。spa
如图:就是可行的分割法。
试计算:
包括这3种分法在内,一共有多少种不一样的分割方法。
注意:旋转对称的属于同一种分割法。code
请提交该整数,不要填写任何多余的内容或说明文字。blog
解题思路:题目要求沿着格子的边线剪成两个部分,仔细观察,剪开的边线是关于中心点(3,3)对称的,因而咱们从点(3,3)开始搜索,it
public class fgfg {
public static int N=6; public static int [][]map=new int[N+1][N+1]; public static int count=0; public static int [][]dir= {{0,1},{1,0},{0,-1},{-1,0}}; public static void f1(int x,int y) { if(x==0||y==0||x==N||y==N) { count++; return; }else { for(int i=0;i<4;i++) { int x1=x+dir[i][0]; int y1=y+dir[i][1]; if(map[x1][y1]==1) continue; map[x1][y1]=map[N-x1][N-y1]=1; f1(x1,y1); map[x1][y1]=map[N-x1][N-y1]=0; } } } public static void main(String[] args) { map[N/2][N/2]=1; f1(3,3); System.out.println(count/4); }
}输出:
509class
输入
第一行输入一个整数N,表示共有N组测试数据
每一组数据都是先输入该地图的行数m(0<m<100)与列数n(0<n<100),
而后,输入接下来的m行每行输入n个数,表示此处有水仍是没水
(1表示此处是水池,0表示此处是地面)
输出
输出该地图中水池的个数。
每一个水池的旁边(上下左右四个位置)若是仍是水池的话的话,它们能够看作是同一个水池。搜索