10分,感觉是哪个地方忘记清空了

P11228 [CSP-J 2024] 地图探险

Wu16327 @ 2024-11-18 19:25:38

//
// Created by 16327 on 2024/11/17.
//
#include <bits/stdc++.h>
using namespace std;
vector<vector<char>> arr(1005,vector<char>(1005));
int main(){
    int T,n,m,k,count=1;
    char temp;
    int x,y,d;
    cin >> T;
    while(T--){
        cin >> n >> m >> k;
        cin >> x >> y >> d;
        x--,y--;
        //地图
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                cin >> temp;
                arr[i][j] = temp;
            }
        }
//        for(int i=0;i<n;i++)
//            for(int j=0;j<m;j++)
//                cout << arr[i][j];
        for(int i=0;i<k;i++) {
            if (d == 0) {
                if (arr[x][y + 1] == '.') {
                    y += 1;
                    count++;
                    continue;
                }
            } else {
                d = (d + 1) % 4;
                continue;
            }
            if (d == 1) {
                if (arr[x + 1][y] == '.') {
                    x += 1;
                    count++;
                    continue;
                }
            } else {
                d = (d + 1) % 4;
                continue;
            }
            if (d == 2) {
                if (arr[x][y - 1] == '.') {
                    y -= 1;
                    count++;
                    continue;
                }
            } else {
                d = (d + 1) % 4;
                continue;
            }
            if (d == 3) {
                if (arr[x - 1][y] == '.') {
                    y -= 1;
                    count++;
                    continue;
                }
            } else {
                d = (d + 1) % 4;
                continue;
            }
        }
        cout << count << endl;
        count = 1;

    }
    return 0;
}

by wangshengchen @ 2024-11-19 18:30:53

@Wu16327

#include<iostream>
using namespace std;
const int N=1e3+10;
int t,n,m,k,x,y,d,ans,d2[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//d是方向 
string s;
int main(){
    ios::sync_with_stdio(0); 
    cin.tie(0);
    cin>>t;
    while(t--){
        cin>>n>>m>>k>>x>>y>>d;
        char map[N][N]={};
        bool vis[N][N]={};
        for(int i=1;i<=n;i++){
            cin>>s;//用字符串输入快 
            int len=s.size();
            for(int j=0;j<len;j++) map[i][j+1]=s[j];//存到字符数组里 
        }
        ans=1;//起点也有一步
        vis[x][y]=1;//判断走过的(可能有重复的) 
        while(k--){
            int nx=d2[d][0]+x,ny=d2[d][1]+y;//现在的x,y坐标 
            if(nx>0&&nx<n+1&&ny>0&&ny<m+1&&map[nx][ny]!='x'){//判断可不可以走 
                x=nx;
                y=ny;
                if(!vis[nx][ny]){//加个数
                    vis[nx][ny]=1;
                    ans++; 
                }
            }
            else d=(d+1)%4;//转向
        }
        cout<<ans<<"\n";
    }
    return 0;
}

|