全部评论 1

  • 谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    谢谢AC君的题解,AC啦

    #include<bits/stdc++.h>
    using namespace std;
    
    char MAP[49][49];
    struct node {
    	int x, y, step;
    }l,r;
    bool vis[49][49];
    int dir[4][2] = { -1,0,0,1,1,0,0,-1 };
    int main() {
    	int R, C;
    	cin >> R >> C;
    	vector<node> transfer;
    	for (int i = 1; i <= R; i++) {
    		cin >> MAP[i] + 1;
    		for (int j = 1; j <= C; j++) {
    			if (MAP[i][j] == '$') {
    				transfer.push_back({ i,j,0});
    			}
    		}
    	}
    	queue<node> q;
    	q.push({ 1,1,0 });
    	vis[1][1] = 1;
    	while (q.size()) {
    		r = q.front();
    		q.pop();
    		if (r.x == R && r.y == C) {
    			cout << r.step + 1;
    			break;
    		}
    		for (int i = 0; i < 4; i++) {
    			l.x = r.x + dir[i][0], l.y = r.y + dir[i][1], l.step = r.step + 1;
    			if (l.x >= 1 && l.x <= R && l.y >= 1 && l.y <= C && !vis[l.x][l.y] && MAP[l.x][l.y] != '#') {
    				q.push(l);
    				vis[l.x][l.y] = 1;
    				if (MAP[l.x][l.y] == '$') {
    					for (int i = 0; i < transfer.size(); i++) {
    						if (vis[transfer[i].x][transfer[i].y]) continue;
    						l.x = transfer[i].x, l.y = transfer[i].y, l.step = r.step + 1;
    						q.push(l);
    						vis[l.x][l.y] = 1;
    					}
    				}
    			}
    		}
    	}
    	if (!vis[R][C]) cout << -1;
    	return 0;
    }
    

    2024-08-04 来自 北京

    0
暂无数据

提交答案之后,这里将显示提交结果~

首页