一共有5个红领巾,编号分别为A、B、C、D、E,老奶奶被他们其中一个扶过了马路。
五个红领巾各自说话:
A :我和E都没有扶老奶奶
B :老奶奶是被C和E其中一个扶过大街的
C :老奶奶是被我和D其中一个扶过大街的
D :B和C都没有扶老奶奶过街
E :我没有扶老奶奶
已知五个红领巾中有且只有2个人说的是真话,请问是谁扶这老奶奶过了街?
public class Main {
class Point{
int x;
int y;
Point(int x,int y){
this.x = x;
this.y = y;
}
}
public String mazeBFS(byte[][] map, int n, int m) {
Point start = new Point(0,0);
Queue<Point> q = new LinkedBlockingQueue<Point>();
q.add(start);
map[0][0] = 2;
List<Integer> list = new ArrayList<Integer>();
StringBuilder sb = new StringBuilder();
StringBuilder result = new StringBuilder();
int index = -2;
int[] x = new int[]{1,0,-1,0};
int[] y = new int[]{0,1,0,-1};
char[] dir = new char[]{'D','R','U','L'};
int tempx,tempy;
while(!q.isEmpty()){
Point data = q.remove();
index++;
if(data.x==n-1 && data.y==m-1)
break;
for(int i=0;i<4;i++){
tempx = data.x+x[i];
tempy = data.y+y[i];
if(tempx>=0 && tempx<n && tempy>=0 && tempy<m && map[tempx][tempy]==0){
Point temp = new Point(tempx, tempy);
q.add(temp);
map[tempx][tempy] = 2;
list.add(index);
sb.append(dir[i]);
}
}
}
while(index!=-1){
result.append(sb.charAt(index));
index=list.get(index);
}
return result.reverse().toString();
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
byte[][] map = new byte[n][m];
String s;
in.nextLine();
for(int i=0;i<n;i++){
s = in.nextLine();
for(int j=0;j<m;j++){
map[i][j] = (byte) (s.charAt(j)-'0');
}
}
String result = new Main().mazeBFS(map, n, m);
System.out.println(result.length());
System.out.println(result);
}
}