分道扬镳

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/XuKathy/article/details/52039944

这里写图片描述
题目链接

题目分析

思路

深度优先探索或是广度优先探索

分析

两人速度相同,我假定是一个人在走,用深度优先探索,先走到哪个门,对应那个人最先到达终点。
广度优先探索同理。

代码

一、

#include<stdio.h>
#include<string.h>
using namespace std;
char a[25][25];
int flag[25][25];
int dd[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
bool df(int x,int y){
    for(int i=0;i<4;i++){
        int d1=x+dd[i][0];
        int d2=y+dd[i][1];
        if(a[d1][d2]=='.'&&flag[d1][d2]==0&&a[d1][d2]!='#'){
            flag[d1][d2]=1;
            if( df(d1,d2))
                return true;          
        }
        if(a[d1][d2]=='a')
            return true;
        else if(a[d1][d2]=='b')
            return false;
    }
}
int main(){
    int m,n,s1,s2;
    int T;
    scanf("%d",&T);
    getchar(); 
    while(T--){
        scanf("%d%d",&m,&n);
        getchar();
        memset(flag,0,sizeof(flag));
        memset(a,'#',sizeof(a));
        for(int i=1;i<=m;i++){
            for(int j=1;j<=n;j++){
                scanf("%c",&a[i][j]);
                if(a[i][j]=='s'){
                    s1=i;
                    s2=j;
                }
            }
            getchar();
        }
        if(df(s1,s2))
            printf("a\n");
        else 
            printf("b\n");
    }
    return 0;
}

二、

#include<stdio.h>
#include<queue>
using namespace std;
struct Node{
    int x,y,d;
}temp;
char a[25][25];
int n,m;
int dd[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
queue<Node>q;
bool bfs(int sx,int sy){
    while(!q.empty())
        q.pop();
    temp.x=sx;
    temp.y=sy;
    temp.d=0;
    q.push(temp);
    while(!q.empty()){
        temp=q.front();
        q.pop();
        int x=temp.x;
        int y=temp.y;
        int d=temp.d;
        if(a[x][y]=='#')continue;
        if(a[x][y]=='a')return true;
        if(a[x][y]=='b')return false;
        a[x][y]='#';
        for(int i=0;i<4;i++){
            int xx=x+dd[0][i];
            int yy=y+dd[1][i];
            if(xx>=0&&xx<n&&yy>=0&&yy<m&&a[xx][yy]!='#'){
                temp.x=xx;
                temp.y=yy;
                temp.d=d+1;
                q.push(temp);
            }
        }
    }
    return false;
}
int main(){
    int T,sx,sy;
    while(~scanf("%d",&T)){
        while(T--){
            scanf("%d%d",&n,&m);
            getchar();
            for(int i=0;i<n;i++){
                for(int j=0;j<m;j++){
                    scanf("%c",&a[i][j]);
                    if(a[i][j]=='s'){
                        sx=i;
                        sy=j;
                    }
                }
                getchar();
            }
            printf(bfs(sx,sy)?"a\n":"b\n");
        }
    }
    return 0;
}

[原创连载] (4) 深圳,一个让我彷徨的“天堂” —— 分道扬镳......

04-30

上周有事去杭州出差,耽搁更新了!而五一假期儿子又连续两天高烧不断就取消了公司的旅游,每天陪他打了三个小时吊针。以前搞什么活动聚会都是比较是积极的,现在可能是有了小孩后,没那种激情了......rnrn 2010年,公司的项目包括周末每天加班加点的搞了一年,结果还是黄了,它的功能其实比较复杂,早期低估了难度及可能遇到的瓶颈。类似实现一个IDA中的流程图与指令表互转的效果,差不多算是一个简易的编译器吧。有一个地方花了两个月时间,始终没办法搞定,1300多行的函数都经常F5调试到忘记哪个反大括号了,最终以放弃告终,接着整下一个项目,也是工业方面的软件。我用熟悉的VC6开始弄了,功能已经实现一大半。几乎需要做一个类似CorelDraw这种绘图工具,能自由拉伸、缩放、组合、填充等特效的画板,前期可想而知,我楞是花了三个月时间把框架和基本图形实现了,底层用的GDI+来实现特殊填充,而难度最大的就是多边形和不规则图形的填充。写到一半等准备信心满满的找PX汇报总结的时候,结果PX出了点事,这一等就是两年,这两年在公司没有任何加薪没有任何其他福利,偶尔上班迟到居然给扣工资了。同事Z忍受不了最终辞职了。rn 两年后,PX回来的第一件事情就是让开发的占股成立新公司,大家几乎都是跟了他四五年的人,说单独开个公司做其他项目吧。后来才知道是BY觉得公司的产品算是稳定,开发部已经不需要了,更不要说给我们加薪,都执意准备要解散我们这个部门了,PX无可奈何,这才准备带领大家另起山头,事先就给BY强调说绝不会做原公司的任何同类产品来恶意竞争。rnrn PX做这个决定还是很果断的,当时在我老婆不停奔波下,新公司顺利注册好了,自然我也成了公司原始股东之一。大家出来后原来的公司决定再扶持我们半年时间,意思就是再多发半年工资,做得起来就做,做不起来就砍掉了,而原公司里有什么硬软件要改的,这边还是照样做,但主要做新公司的事情。PX大概知道起码得100W起步,但考虑到我们几个没什么钱就拟定按50W来投钱,当时我出了差不多3W,因为所有开发部的送技术干股2 - 5个点,我自己再买5个点就10个点了;另一个搞硬件的同事S共15%;PX也才占了18%。当时对股份这个事情也没觉得什么不妥,毕竟大家都是绑在一条船上想把公司做大做强。BY反倒觉得无所谓,随便打了5W就当投进来玩玩,结果三年之后他就有点后悔股份买少了。技术经理PX则此是已要在开始规划公司3-5年内的产品了,全身心的在带领大家开始加班加点的搞了。慢慢的才知道,工业级产品不同于普通消费品那种小半年就极可能死掉了,要么过时滞销,要么被方案公司整死。工业级的大多都是十年以上的期限,只要你不停产,总有客户会一直会用你的。rnrn 讲到这里,有个心得,商业级的产品一定要坚持,绝对不能用任何第三方无源代码的LIB库或控件。因为早些年公司为了加快开发进度,在我来之前就买了一个第三方的无源OCX控件,反正那时也就5000块(现在这控件居然要卖到50W了)送一个U盘加密狗,只有一个又挺不方面,后来在阿莫论坛上随便找个人就复制了几份,主要是家里、公司、PX都用起来方面。当时觉得他的功能挺完善的,结果之后才发现那是“噩梦”的开始。那个控件是一个前期离职的同事买来的,还留下一个半成品的VC6代码,我接手后看到这套代码,一种砍人的冲动都有了:各种全局变量a、b、i、j、k到处定义声明和使用,最多的一个变量有几百处;函数名就更不提了,全局的、成员的乱成一团简直没法看,本来又想推到重来,结果PX说时间太紧了等不及。只好硬着头皮在上面改了,可想而知在这种发狂的代码下擦屁股,是一种怎样的心情!有几次半夜两点叫去公司加班,客户有功能需要连夜改好,这时候已经不冲速溶的咖啡,改泡浓茶了……rnrn 最蛋疼的是控件没有源码,我这边能看到的全是InvokeHelper之类的代码毫无意义,几次遇到控件的BUG找到卖控件的,人家直接叫你50W买新版的,我彻底无语了。在这种高压环境下面,晚上经常呓语工作上的事情。最搞笑的是公司所有的软件从来都没有1.0,直接从2.0开始,PX的意思是免得别人觉得你的不稳定……rnrn 后来我用了BCG把界面布局稍微大改一下,等所有的改完基本稳定时,已经是2.1的版本,中间起码升级三百次以上,历经了无数个失眠的白昼与夜晚,偶尔有几次,走到楼顶,点上一支烟就会在想,我们这么努力会不会有结果?因为当时同行业的老大每月大概是30W台出货量,老二大概是10W台,老三是3W台,而我们不到30台,听到这个消息对我打击挺大的,有很长的一段时间都非常消极,就像一个看不到前方出路的坑,一个接一个的填不满,挺失落的。这时,需要一个行业资深的人,比如PX就会叫大家在一起,周末找大家去一个咖啡厅或茶馆之类的地方,聊聊天喝喝茶放松放松,憧憬一下未来,这也许是一种团队的精神支柱!PX自己本身也写写C的代码,偶尔会用易语言写个小工具之类的。随着时间越来越久,慢慢会发现PX考虑到的,是近期2-3年公司要做什么产品,先把根基打好,再慢慢延伸到同行业其他周边领域的产品。rnrn 一直到年底,打击还是蛮大的,一年的出货量不到300台,真担心这么拼命弄出来的东西就这么黄了,而且中间一直都没有过分红或其他奖金之类的,在深圳拿着5K的工资就这么低头干,每一个人都是身兼数职,这薪水一干就是三年。待到第二年底的时候,PX提出来要把MFC自带的界面换掉,弄个好看一点的界面,于是我找到了XTP库。结果可想而知,这种像一坨屎一样的代码,硬着头皮、捂着鼻子得再重头擦一次。PX对软件产品要求比较高,从软件的布局、风格都把控得比较到位,有时候精确到一个MessageBox中的文字都会斟酌片刻,尽量让任何新手都能熟练的使用。于是第二年中旬,从2.1直接跳到3.0版本,新版的软件横空出世,实际上只是改用XTP界面皮肤特效,让软件看起来没那么大众的界面,然后让客户觉得逼格又提升了不少。rnrn 3.0的版本花了差不多半年,期间困扰最久的一次是控件没有提供绘图接口,而且遍历扫描的时候,需要裁剪每一个区域的图形,最后用自己写的简易压缩算法将图形打包,这中间花了大量的时间优化,因为整个硬件的flash只有64M,裸跑的系统也得25M左右,剩下10M左右用作堆栈缓冲,实际用户可用的内存不到30M,如果一张800*600的BMP图片,即使丢掉BMP文件送水也占了很大内存(800*600*4),接近1.8M了就会导致存不下几副图片,而下面没有找到跨平台的纯C代码来解析PNG、JPG之类的,这种格式的也有压缩将导致图像不清晰所以放弃。当时打算hook winproc来拦截绘图事件,但这样太复杂了,而且不能保证截图的完整性,因为他有可能还没画玩。后来苦恼很久后,想到了虚拟打印,于是在主视图的后台截图问题迎刃而解了。rnrn 在接触工业产品几年后,才知道为什么很多人都没有采用WINCE系统,WinCE最大的BUG就是掉电保存做不了,微软没有开放接口,导致开发人员只能用定时器来写FLASH,这样会导致很容易写坏,以前有个同行就是用CE做的同类产品,一年后全部召回换FLASH被迫放弃CE。所以很多人宁愿写个简易系统或裸跑,然后加个大的法拉电容用来在掉电一瞬间写入FLASH,而不会用WINCE这种能快速开发但要靠定时刷FLASH的方法。rnrn 就这样,3.0的版本稳定下来,已然是第三年了,最恐怖的是还有个5.0等着我来踩......rnrnrn

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试