zoukankan      html  css  js  c++  java
  • 2014.9.27模拟赛【栅栏迷宫】

    1、栅栏迷宫

    田野上搭建了一个黄金大神专用的栅栏围成的迷宫。幸运的是,在迷宫的边界上留出了两段栅栏作为迷宫的出口。更幸运的是,所建造的迷宫是一个“完美的”迷宫:即你能从迷宫中的任意一点找到一条走出迷宫的路。给定迷宫的宽W(1<=W<=38)及长H(1<=H<=100)。 2*H+1行,每行2*W+1的字符以下面给出的格式表示一个迷宫。然后计算从迷宫中最“糟糕”的那一个点走出迷宫所需的步数(就是从最“糟糕”的一点,走出迷宫的最少步数)。(即使从这一点以最优的方式走向最靠近的出口,它仍然需要最多的步数)当然了,黄金大神让你必须只会水平或垂直地在X或Y轴上移动,你不能从来不走对角线。每移动到一个新的方格算作一步(包括移出迷宫的那一步)这是一个W=5,H=3的迷宫:

    +-+-+-+-+-+
    |         |
    +-+ +-+ + +
    |     | | |
    + +-+-+ + +
    | |     |  
    +-+ +-+-+-+

    如上图的例子,栅栏的柱子只出现在奇数行或奇数列。每个迷宫只有两个出口。

    PROGRAM NAME: maze

    INPUT FORMAT:

    (file maze.in)

    第一行: W和H(用空格隔开) 
    第二行至第2*H+1行:  每行2*W+1个字符表示迷宫 

    OUTPUT FORMAT:

    (file maze.out)

    输出一个单独的整数,表示能保证牛从迷宫中任意一点走出迷宫的最小步数。

    SAMPLE INPUT

    5 3
    +-+-+-+-+-+
    |         |
    +-+ +-+ + +
    |     | | |
    + +-+-+ + +
    | |     |  
    +-+ +-+-+-+

    SAMPLE OUTPUT

    9

    善良的学长:样例输入可以复制进记事本或者文本文档这样看起来更加直观!!!=v=

    广搜签到题……难度为负……就是读入的处理讨厌了点

    考场上预处理没搞好才90……一定是因为昨晚打cf太迟今天没睡醒

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    using namespace std;
    #define N 100000
    const int mx[5]={0,-1,0,1,0};
    const int my[5]={0,0,1,0,-1};
    int n,m,t,w,ma;
    char ch;
    int mrk[210][210];
    bool link[210][210][5];
    int dist[210][210];
    int qx[N],qy[N];
    inline void bfs()
    {
    	while (t<w)
    	{
    		int nx=qx[++t],ny=qy[t];
    		for (int k=1;k<=4;k++)
    		  if (link[nx][ny][k])
    		  {
    		  	int wx=mx[k]+nx;
    		  	int wy=my[k]+ny;
    		  	if (wx<1||wx>n||wy<1||wy>m||dist[wx][wy]!=-1)continue;
    		  	dist[wx][wy]=dist[nx][ny]+1;
    		  	ma=max(ma,dist[wx][wy]);
    		  	qx[++w]=wx;
    		  	qy[w]=wy;
    		  }
    	}
    }
    int main()
    {
    	freopen("maze.in","r",stdin);
    	freopen("maze.out","w",stdout);
    	memset(dist,-1,sizeof(dist));
    	scanf("%d%d",&m,&n);
    	for (int i=1;i<=2*n+1;i++)
    	{
    		for(int j=1;j<=2*m+1;j++)
    		{
    		  char ch=getchar();
    		  while (ch!=' '&&ch!='+'&&ch!='-'&&ch!='|')ch=getchar();
    		  if(i%2!=0&&j%2==0)
    		  {
    		  	if (ch!=' ')continue;
    		  	int x=(i-1)/2;
    		  	int y=j/2;
    			link[x][y][3]=1;
    			link[x+1][y][1]=1;
    		  }
    		  if(i%2==0&&j%2!=0)
    		  {
    		  	if (ch!=' ')continue;
    		  	int x=i/2;
    		  	int y=(j-1)/2;
    		  	link[x][y][2]=1;
    		  	link[x][y+1][4]=1;
    		  }
    		}
    	}
    	for (int i=1;i<=n;i++)
    	{
    		if (!link[i][1][4])continue;
    		ma=dist[i][1]=1;
    		qx[++w]=i;
    		qy[w]=1;
    	}
    	for (int i=1;i<=n;i++)
    	{
    		if (!link[i][m][2])continue;
    		ma=dist[i][m]=1;
    		qx[++w]=i;
    		qy[w]=m;
    	}
    	for (int i=1;i<=m;i++)
    	{
    		if (!link[1][i][1])continue;
    		ma=dist[1][i]=1;
    		qx[++w]=1;
    		qy[w]=i;
    	}
    	for (int i=1;i<=m;i++)
    	{
    		if (!link[n][i][3])continue;
    		ma=dist[n][i]=1;
    		qx[++w]=n;
    		qy[w]=i;
    	}
    	bfs();
    	printf("%d",ma);
    }
    

      

    ——by zhber,转载请注明来源
  • 相关阅读:
    loadrunner基础学习笔记五-场景
    loadrunner基础学习笔记四
    loadrunner基础学习笔记三
    loadrunner基础学习笔记二
    loadrunner 基础-学习笔记一
    jmeter创建基本的FTP测试计划
    简单FTP服务器搭建
    Vitya and Strange Lesson CodeForces
    Ancient Printer HDU
    ZYB loves Xor I HDU
  • 原文地址:https://www.cnblogs.com/zhber/p/4035900.html
Copyright © 2011-2022 走看看