1 条题解
-
0
#include<bits/stdc++.h> using namespace std; int n,m,row,col; // [1] n-网格的行列数(n×n),m-指令序列的长度,row/col-机器人初始坐标 string s; // [2] s-存储机器人的移动指令序列(仅包含U、D、L、R) // [3] dfs函数:模拟从第j个指令开始执行的过程,统计可连续执行的指令数 // x,y:当前机器人的坐标;step:已成功执行的指令数;j:当前要执行的指令索引 void dfs(int x,int y,int step,int j){ if(j>=m){ // [4] 若当前指令索引超出序列长度(无后续指令),输出已执行的指令数并返回 cout<<step<<endl; return; } // 根据当前指令,计算移动的偏移量a(行变化)、b(列变化) int a=0,b=0; if(s[j]=='U'){a=-1;b=0;} // [5] 指令U:向上移动,行-1 if(s[j]=='D'){a=1;b=0;} // [6] 指令D:向下移动,行+1 if(s[j]=='L'){a=0;b=-1;} // [7] 指令L:向左移动,列-1 if(s[j]=='R'){a=0;b=1;} // [8] 指令R:向右移动,列+1 x+=a; y+=b; // [9] 计算执行当前指令后的新坐标 // 判断新坐标是否在网格范围内(0≤x<n 且 0≤y<n) if((x>=0 && x<n) && (y>=0 && y<n)){ // 若在网格内,继续执行下一条指令(已执行数+1,指令索引+1) dfs(x,y,step+1,j+1); }else{ // 若不在网格内,当前指令无法执行,输出已执行的指令数并返回 cout<<step<<endl; return; } } int main(){ cin>>n>>m>>row>>col>>s; // [10] 输入网格大小、指令长度、初始坐标、指令序列 // 遍历每个指令索引i,模拟从第i个指令开始执行的过程 for(int i=0;i<m;i++){ // 初始坐标为(row,col),已执行指令数为0,从第i个指令开始执行 dfs(row,col,0,i); } return 0; }
- 1
信息
- ID
- 1451
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者