设置镜子上限,不然容易超限。dfs
import java.util.*;
import java.math.*;
import java.io.*;
public class Main {
public static int r,c,cx,cy,is[][],res=100;
public static char map[][];
public static int dx[]={1,1,-1,-1,0,0,1,-1};
public static int dy[]={-1,1,-1,1,1,-1,0,0};
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
c=sc.nextInt();
r=sc.nextInt();
sc.nextLine();
is=new int[r][c];
for(int i=0;i<r;i++)
Arrays.fill(is[i],10000);
map=new char[r][c];
for(int i=0;i<r;i++){
String s=sc.nextLine();
map[i]=s.toCharArray();
for(int j=0;j<c;j++)
if(map[i][j]=='C'){
cx=i;cy=j;
}
}
map[cx][cy]='*';
for(int i=4;i<8;i++){
dfs(cx+dx[i],cy+dy[i],i,0);
}
System.out.println(res);
}
public static void dfs(int x,int y,int dir,int sum){
//System.out.println(sum);
if(x<0||y<0||x==r||y==c||map[x][y]=='*'||sum>is[x][y])
return;
is[x][y]=sum;
if(sum>res)
return;
if(map[x][y]=='C'){
res=Math.min(res,sum);
return;
}
for(int i=4;i<8;i++){
int xx=x+dx[i];
int yy=y+dy[i];
if(i==dir){
dfs(xx,yy,i,sum);
}
else
dfs(xx,yy,i,sum+1);
}
}
}