一个地图,#
表示可走的格子,.
代表不可走的格子,S
代表起点,E
代表终点,没有岔路且S到E必可达
S上摆放了一个筛子:前面为3,后面为4,上面为1,底面为6,左面为5,右面为2
筛子只能通过翻转从S走到E,每翻转一次,筛子就会给路径上的格子染上与底面同样的颜色(用数字表示)
请输出骰子到终点后的地图
输入第一行为组数,第二行为地图尺寸
输入示例:
1
5
S###.
...#.
E#.##
.#..#
.####
示例答案:
6215.
...4.
12.26
.3..3
.5621
解答
主要就是明确筛子的状态空间
只有一条路径,无岔路,我这里看成有岔路了,然后写dfs去找正确路径耽误了时间。。
import java.util.Scanner;
class S
{
int qian,hou,shang,xia,zuo,you;
int temp_shang,temp_xia,temp_zuo,temp_you;
S(int qian,int hou, int shang ,int xia,int zuo,int you)
{
this.qian = qian;
this.hou = hou;
this.shang = shang;
this.xia = xia;
this.zuo = zuo;
this.you = you;
}
void youFan()
{
temp_zuo = zuo;
temp_you = you;
you = shang;
zuo = xia;
shang = temp_zuo;
xia = temp_you;
}
void xiaFan()
{
temp_shang = shang;
temp_xia = xia;
xia = qian;
shang = hou;
qian = temp_shang;
hou = temp_xia;
}
void zuoFan()
{
temp_zuo = zuo;
temp_you = you;
zuo = shang;
you = xia;
xia = temp_zuo;
shang = temp_you;
}
void shangFan()
{
temp_shang = shang;
temp_xia = xia;
shang = qian;
xia = hou;
hou = temp_shang;
qian = temp_xia;
}
int color()
{
return xia;
}
}
public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int group=0;group<T;group++)
{
int n = sc.nextInt();
int[][] array = new int[n][n];
int startX = 0,startY=0;
int endX =0 ,endY=0;
for(int x=0;x<n;x++)
{
String line = sc.next();
for (int y = 0; y < n; y++) {
if (line.charAt(y) == 'S') {
array[x][y] = 6;
startX = x;
startY = y;
}
if (line.charAt(y) == 'E')
{
array[x][y] = 0;
endX = x;
endY = y;
}
if (line.charAt(y) == '#')
array[x][y] = 0;
if (line.charAt(y) == '.')
array[x][y] = -9;
}
}
//新建筛子
S shaizi = new S(3,4,1,6,5,2);
int i=startX,j=startY;
while(!(i==endX&&j==endY))
{
//上
if (i+1<n)
if(array[i+1][j]==0)
{
shaizi.shangFan();
array[i+1][j]=shaizi.color();
i++;
continue;
}
//下
if (i-1>=0)
if(array[i-1][j]==0)
{
shaizi.xiaFan();
array[i-1][j]=shaizi.color();
i--;
continue;
}
//右
if (j+1<n)
if(array[i][j+1]==0)
{
shaizi.youFan();
array[i][j+1]=shaizi.color();
j++;
continue;
}
//左
if (j-1>=0)
if(array[i][j-1]==0)
{
shaizi.zuoFan();
array[i][j-1]=shaizi.color();
j--;
continue;
}
}
array[i][j]=shaizi.color();
//输出array
for(int i1 = 0; i1 < n; i1++)
{
for (int j1 = 0; j1 < n; j1++)
{
if (array[i1][j1]==-9)
System.out.print(".");
else{
System.out.print(array[i1][j1]);
}
}
System.out.println();
}
}
}
}