zcmu1676

原创 2015年11月21日 15:30:44

依次对每个数字bfs,得到的结果与从S点bfs比较,这样进行了多次bfs会超时,可以从E点开始搜索,直到把S和与它同一层都搜索完之后就可以结束了,因为这样搜索过程中遇到的数字都是<=S的步数的

#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cctype>
#include <cstring>
using namespace std;


struct Node
{
    int x;
    int y;
    int step;
    Node(int x1,int y1,int steps):x(x1),y(y1),step(steps){}
};
int starts[1][2],n,m,Visit[1005][1005],sum,STEP;
int dx[4]={-1,1,0,0};
int dy[4]={0,0,1,-1};
char s[1005][1005];


int BFS(int a,int b)
{
    queue<Node>q;
    q.push(Node(a,b,0));
    Visit[a][b]=1;
    while(!q.empty())
    {
        Node t=q.front();
        if(t.step-1==STEP)
            return sum;
        q.pop();
        for(int i=0;i<4;i++)
        {
            int c=t.x+dx[i];
            int d=t.y+dy[i];
            if(c<n&&c>=0&&d>=0&&d<m&&s[c][d]!='T'&&Visit[c][d]!=1)
            {


                if(s[c][d]=='S')
                {
                    s[c][d]='0';
                    STEP=t.step;
                }
                if(isdigit(s[c][d])&&s[c][d]-'0'>0)sum+=s[c][d]-'0';
                q.push(Node(c,d,t.step+1));
                Visit[c][d]=1;
            }
        }
    }
    return 0;
}
int main()
{
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        int starts1=0,starts2=0;
        sum=0,STEP=1000005;
        memset(starts,0,sizeof(starts));
        memset(Visit,0,sizeof(Visit));
        for(int i=0;i<n;i++)
            scanf("%s",s[i]);
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                if(s[i][j]=='E'){starts1=i;starts2=j;}
       printf("%d\n",BFS(starts1,starts2));
    }
    return 0;
}

相关文章推荐

spoj 1676 Text Generator ac机+矩阵幂 好题!

不得不说这题A 的真是格外的艰辛。。TLE

poj 1676 What time is it?(经典模拟)

题目:http://poj.org/problem?id=1676 What time is it? Time Limit: 1000MS   Memory Limit...

poj 1676-What time is it?

博士上课讲了这道题,但是给的代码真心让人看不懂,借鉴了一些其余自己补充了好多,虽然时间是0ms,但是memory用到了700k,博士的代码memory只有20k,长度也比我少一半,看来差距真心大。 ...

POJ 1676

#include #include int main() { int t; scanf("%d",&t); while(t--) { getchar()...
  • KJBU2
  • KJBU2
  • 2014年07月01日 15:28
  • 411

poj1676 What time is it?

//这一题真是耗尽了脑汁也找不出WA在哪!?(好打击人的一题) //我的思路是:将输入的LED时钟还原为数字,然后再一一进行匹配,过程可以进行一些剪枝操作(例如第一个数字不可以大于2,第三个数字不可...
  • yzl_rex
  • yzl_rex
  • 2012年05月01日 17:12
  • 701

bzoj 2645: Vijos1676 陶陶吃苹果 (树形DP)

题目描述传送门题目大意:一棵苹果树有n个节点,每个节点上有c[i]个苹果,这棵树高度为h。 剪掉一些枝条,使得修剪过后的树满足节点数-高度≤k,且保留尽可能多的苹果。题解如果一个点被保留,那么这个...

三星1676碳粉不兼容

  • 2015年05月22日 08:34
  • 311KB
  • 下载

ML1676驱动

  • 2014年06月05日 16:57
  • 17.07MB
  • 下载

ZCMU-1107: 迟来的A+B

解决思路 原先以为很简单,随手写了一个,但是TLE,然后仔细看了一下题目,看到了dp小王子,那这道题就和动态规划有关,我就用两个数组,把sum的两个组成部分都通过递推存到数组里面,然后查询的时候直接...

三星ML1670 ML1676清零软件

  • 2013年01月10日 17:44
  • 430KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:zcmu1676
举报原因:
原因补充:

(最多只允许输入30个字)