https://blog.csdn.net/mylegendarytime/article/details/79316518
第一题:
数的时候先数第一行U的 再数能到达U的
再数最后一行带D的 能到达D的
第一列带L的 能到达L的
最后一列带R的 能到达R的
代码实现还是很麻烦啊 能数就认真数吧 争取半小时完成。
思路:1 暴力递归 声明二维数组 写进去 int sum记录走出来的人数。定义一个bool数组,初始为false 定义一个方法
2. 双重for循环先写好结束的条件:走出边界就结束 即i>9||j>9||i<0||j<0 走出去sum++,跳出break,走下一个位置。
如果这个位置已经走过为true 那么跳出。上述情况都没发生则 设置为true,
3.定义走的规则 用switch。
4 main方法中调用
#include <cstdio>
char dir[11][11]={"UDDLUULRUL",
"UURLLLRRRU",
"RRUURLDRLD",
"RUDDDDUUUU",
"URUDLLRRUU",
"DURLRLDLRL",
"ULLURLLRDU",
"RDLULLRDDD",
"UUDDUDUDLL",
"ULRDLUURRR"};
int sum = 0;
bool co[10][10];
void canout(int i,int j){
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
co[i][j]=false;
while(true){
if(i>9||j>9||i<0||j<0){
sum++;
break;
}
if(co[i][j]) break;
co[i][j] = true;
switch(dir[i][j]){
case 'U':i--; break;
case 'L':j--; break;
case 'D':i++; break;
case 'R':j++; break;
default:break;
}
}
}
int main(){
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
canout(i,j);
}
}
printf("%d\n",sum);
return 0;
}
第二题:bfs(求最小步数)
每一次列出几种可能的情况下 存储当前步数,