好久没记的《笔记19》
2025-10-08 10:26:05
发布于:广东
第一题——地图探险(CSP-J,2024)
1.导入
frist,我们导入
#include <bits/stdc++.h>
using namespace std;
其实是
#include <iostream>
#include <set>
#include <string>
#include <tuple>
using namespace std;
2.main函数
int main(){
}
以下是主函数里的
第一段——开始
int main(){
int t;
cin>>t;
while(t--){
int n,m,k,x,y,d;
cin>>n>>m>>k>>x>>y>>d;
char map[1005][1005];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>map[i][j];
}
}
//下面几行在这里
}
}
第二段——检测
int dx={0,1,0,-1};
int dy={1,0,-1,0};
set<pair<int,int>> vis_pos;
set<tuple<int,int,int>> vis_sta;
第三段——模拟
int x=xx,y=yy,d=dd;
vis_pos.insert({x,y});
vis_sta.insert(make_tuple(x,y,d));
for(int i=0;i<k;i++){
int nx=x+dx[d];
int ny=y+dy[d];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&map[nx][ny]=='.'){
x=nx;
y=ny;
}
else d=(d+1)%4;
vis_pos.insert({x,y});
if(vis_sta.count(make_tuple(x,y,d))) break;
vis_sta.insert(make_tuple(x,y,d));
}
第四段——输出
cout<<vis_pos.size()<<endl;
3.完整代码
#include <iostream>
#include <set>
#include <string>
#include <tuple>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int n,m,k,xx,yy,dd;
cin>>n>>m>>k>>xx>>yy>>dd;
char map[1005][1005];
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>map[i][j];
}
}
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
set<pair<int,int>> vis_pos;
set<tuple<int,int,int>> vis_sta;
int x=xx,y=yy,d=dd;
vis_pos.insert({x,y});
vis_sta.insert(make_tuple(x,y,d));
for(int i=0;i<k;i++){
int nx=x+dx[d];
int ny=y+dy[d];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&map[nx][ny]=='.'){
x=nx;
y=ny;
}
else d=(d+1)%4;
vis_pos.insert({x,y});
if(vis_sta.count(make_tuple(x,y,d))) break;
vis_sta.insert(make_tuple(x,y,d));
}
cout<<vis_pos.size()<<endl;
}
}
这里空空如也













有帮助,赞一个