栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 2081 Mission Impossible

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 2081 Mission Impossible

#include<iostream>#include<queue>#include<cstring>#include<cstdio>#include<cmath>using namespace std;int N, M, minstep, sum, msum;char maze[15][15];int vis[15][15];int dx[] = { 0, -1, 0, 1};int dy[] = {-1,  0, 1, 0};typedef struct {    int x, y;    int step;}State;State begin, end;queue<State> q;int mayreach(int x, int y, int step){    if((int)abs((double)(end.x - x)) + abs(double(end.y - y)) > minstep - step)        return 0;    return 1;}void dfs(int x, int y, int step, bool mines){    if(x < 0 || x > N-1 || y < 0 || y > M-1)        return;    if(x == end.x && y == end.y && step == minstep)    {        if(mines == true) msum++;        sum++;    }    if(maze[x][y] == '#')        return;    if(!mayreach(x, y, step))        return;    if(maze[x][y] == 'M')        mines = true;    dfs(x, y-1, step + 1, mines);    dfs(x, y+1, step + 1, mines);    dfs(x-1, y, step + 1, mines);    dfs(x+1, y, step + 1, mines);}int main(){    int ncases, i, j, ok, c;    scanf("%d", &ncases);    getchar();    for(c = 1; c <= ncases; c++)    {        scanf("%d%d", &N, &M);        getchar();        for(i = 0; i < N; i++)        { for(j = 0; j < M; j++) {     scanf("%c", &maze[i][j]);     if(maze[i][j] == 'S')     {         begin.x = i;         begin.y = j;     }     else if(maze[i][j] == 'T')     {         end.x = i;         end.y = j;     } } getchar();        }        memset(vis, 0, sizeof(vis));        ok = 0;        begin.step = 0;        sum = msum = 0;        vis[begin.x][begin.y] = 1;        q.push(begin);        while(!q.empty())        { State u = q.front(); q.pop(); if(u.x == end.x && u.y == end.y) {     ok = 1;     minstep = u.step;     break; } for(i = 0; i < 4; i++) {     State v;     v.step = u.step + 1;     v.x = u.x + dx[i];     v.y = u.y + dy[i];     if(v.x >= 0 && v.x < N && v.y >=0 && v.y < M && maze[v.x][v.y] != '#' && !vis[v.x][v.y])     {         q.push(v);         vis[v.x][v.y] = 1;     } }        }        dfs(begin.x, begin.y, 0, false);        if(!ok || sum == msum) printf("Mission #%d:nMission Impossible.nn", c);        else printf("Mission #%d:nThe probability for the spy to get to the telegraph transmitter is %.2lf%%.nn", c, (0.0+sum-msum)*100/sum);        while(!q.empty()) q.pop();    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/370434.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号