全部评论 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
首页