无
分类: Java
2006-08-14 15:45:17
package topcoder;
/*
* Created on 2005-12-1
* @author Admin.zhouyuan
*/
public class MirrorPath
{
private int direction; // 向下走为0,向右走为1,向上走为2, 向左走为3
private int row;
private int col;
public String[] path(String[] map)
{
findExit(map);
char[][] ch = new char[map.length][map[0].length()];
for (int i = map.length - 1; i >= 0; i--)
for (int j = map[0].length() - 1; j >= 0; j--)
{
ch[i][j] = map[i].charAt(j);
}
System.out.println("row = " + this.row + "; col = " + this.col + "; direction = " + direction);
while (row >= 0 && row < map.length && col >= 0 && col < map[0].length())
{
switch (this.direction)
{
case 0:
switch (ch[row][col])
{
case '.':
ch[row][col] = '|';
++row;
break;
case '-':
ch[row][col] = '+';
++row;
break;
case '`':
direction = 1;
++col;
break;
case '/':
direction = 3;
--col;
break;
}
// System.out.println("0");
break;
case 1:
switch (ch[row][col])
{
case '.':
ch[row][col] = '-';
++col;
break;
case '|':
ch[row][col] = '+';
++col;
break;
case '`':
direction = 0;
++row;
break;
case '/':
direction = 2;
--row;
break;
}
// System.out.println("1");
break;
case 2:
switch (ch[row][col])
{
case '-':
ch[row][col] = '+';
--row;
break;
case '.':
ch[row][col] = '|';
--row;
break;
case '`':
direction = 3;
--col;
break;
case '/':
direction = 1;
++col;
break;
}
// System.out.println("2");
break;
case 3:
switch (ch[row][col])
{
case '|':
ch[row][col] = '+';
--col;
break;
case '.':
ch[row][col] = '-';
--col;
break;
case '`':
direction = 2;
--row;
break;
case '/':
direction = 0;
++row;
break;
}
break;
}
}
for (int i = map.length - 1; i >= 0; i--)
map[i] = new String(ch[i]);
return map;
}
private void findExit(String[] map)
{
int i = map.length - 1;
int j = map[0].length() - 1;
for (; i > 0; i--)
{
if (map[i].charAt(0) != '#')
{
this.direction = 1;
this.row = i;
this.col = 0;
return;
}
else
if (map[i].charAt(j) != '#')
{
this.direction = 3;
this.row = i;
this.col = j;
return;
}
}
i = map.length - 1;
j = map[0].length() - 1;
for (; j >= 0; j--)
{
if (map[0].charAt(j) != '#')
{
this.direction = 0;
this.row = 0;
this.col = j;
return;
}
else
if (map[map.length - 1].charAt(j) != '#')
{
this.direction = 2;
this.col = j;
this.row = i;
return;
}
}
// System.out.println("direction = " + this.direction);
return;
}
public static void main(String[] args)
{
MirrorPath mp = new MirrorPath();
/*
* String[] str = new String[]{ "############", "#######/....", "######//####", "#####//#####", "####//######",
* "..../#######", "############" };
*
* String[] str = new String[]{ "###########.#", "#/........./.", "#.#########.#", "#`........./#",
* "#############" };
*
* String[] str = new String[]{ "########.##", "#./......`#", "#../.`....#", "#.`...../.#", "#....`.../#",
* "###.#######" };
*/
String[] str = new String[] { "##.########", "#.........#", "..`.`.....#", "#..`......#", "#.`.`.`...#", "#....`....#",
"#...`.`.`.#", "#.........#", "#.....`./.#", "#.........#", "###########" };
for (int i = 0; i < str.length; i++)
{
System.out.println(str[i]);
}
mp.path(str);
for (int i = 0; i < str.length; i++)
{
System.out.println(str[i]);
}
}
}