青蛙跳

来源:互联网 发布:javascript php 混合 编辑:程序博客网 时间:2024/04/28 16:37

这里写图片描述

这里写图片描述

#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <climits>#include <cmath>#include <cfloat>#include <algorithm>#include <vector>#include <map>#include <set>#include <queue>#include <stack>#include <functional>#include <string>#define EXP 1e-9#define LL long long#define PB push_back#define N 100010using namespace std;int a, b, p;int x[15][15], f[15][15], visit[15][15];int dir[4][2] = {0, 1, 0, -1, 1, 0, -1, 0};int cost[4] = {1, 1, 3, 0};void solve() {    int dis[15][15];    memset(dis, -1, sizeof(dis));    memset(visit, 0, sizeof(visit));    queue< pair<int, int> > Q;    Q.push(make_pair(0, 0));    dis[0][0] = 1;    visit[0][0] = 1;    f[0][0] = -1;    while(!Q.empty()) {        pair<int, int> tmp = Q.front();        Q.pop();        int xx = tmp.first, yy = tmp.second;        visit[xx][yy] = 0;        for(int i = 0; i < 4; ++i) {            int m = xx + dir[i][0];            int n = yy + dir[i][1];            if(m>=0&&m<a && n>=0&&n<b && x[m][n] != 0) {                if(dis[m][n]==-1 || dis[m][n] > dis[xx][yy]+cost[i]) {                    dis[m][n] = dis[xx][yy] + cost[i];                    f[m][n] = xx * b + yy;                    if(visit[m][n] == 0) {                        visit[m][n] = 1;                        Q.push(make_pair(m, n));                    }                }            }        }    }    cout << dis[0][b-1] << endl;    if(dis[0][b-1]==-1 || dis[0][b-1] > p) {        cout << "Can not escape!" << endl;    } else {        vector< pair<int, int > > re;        int ff = b-1;        while(ff != -1) {            int x = ff / b;            int y = ff % b;            re.push_back( make_pair(x, y) );            ff = f[x][y];        }        for(int i = (int)re.size()-1; i>=0; --i) {            cout << "[" << re[i].first << "," << re[i].second << "]";            if(i != 0) {                cout << ",";            }        }        cout << endl;    }}int main(int argc, char* argv[]) {    while(cin >> a >> b >> p) {        for(int i = 0; i < a; ++i)        for(int j = 0; j < b; ++j) {            cin >> x[i][j];        }        solve();    }    return 0;}
0 0
原创粉丝点击