• nyoj 82


      题目:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=82

      2018-06-23 23:44:05 p.s.自己省错题了:

    描述

    一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编过号的门(N<=5),它们分别被编号为A,B,C,D,E.为了找到宝藏,ACM必须打开门,但是,开门之前必须在迷宫里找到这个打开这个门所需的所有钥匙(每个门都至少有一把钥匙),例如:现在A门有三把钥匙,ACM就必须找全三把钥匙才能打开A门。现在请你编写一个程序来告诉ACM,他能不能顺利的得到宝藏。

      这里重点是开门前必须找到所有这个门对应的钥匙 orz。。。


       目前难点在于,这样的情况:

    4 7
    S.Aa.X.
    a.Xc.C.
    b.X..DG
    .cB..Xd
    

      该数据太恶心...一时半会儿没想到办法。

      2018-06-28 17:51:14 p.s.今天看了又去一下昨天的结果,已显示该题AC了。

      思路:记录迷宫中所有钥匙分别有多少,判断是否集齐该门对应的所有钥匙,如果没有集齐则将前一个位置记录到队列中。

      2018-06-27 11:00:59 p.s.终于写出来了,这下应该对了,测试数据:

    $ ./test
    4 7
    S.Aa.X.
    a.Xc.C.
    b.X..DG
    .cB..Xd
    YES
    X X A X X X . 
    X X X X X C X 
    X X X X X D G 
    X X B X X X d 
    3 6
    SbAdX.
    a.BD.G 
    cBCdaX
    YES
    X X A X X . 
    X X B D X G 
    X B C X X X 
    4 4
    S.X.
    a.X.
    ..XG
    ....
    YES
    X X X . 
    X X X . 
    X X X G 
    X X X X 
    3 4
    S.Xa
    .aXB
    b.AG
    NO
    X X X a 
    X X X B 
    X X A G

      但oj上显示结果是:判题中...?!这是什么鬼 > < #(貌似是服务端内部错误。。。。

      代码:

    #include <bits/stdc++.h>
    using namespace std;
    struct ss
    {
    	int i, j;
    	ss() {}
    	ss(int x, int y) : i(x), j(y) {}
    	void startpoint(int x, int y) { i = x, j = y; }
    };
    #define Index(c) ((c) - 'a')
    int key[5], dir[4][2] = { 1, 0, -1, 0, 0, 1, 0, -1 };
    int a, b, c, d, e;
    bool bfs(vector<vector<char> > & maze, ss ps)
    {
    	memset(key, 0, sizeof(key));
    	queue<ss> q, door;
    	q.push(ps);
    	maze[ps.i][ps.j] = 'X';
    	while(!q.empty())
    	{
    		ps = q.front();
    		q.pop();
    		for (int i = 0; i < 4; i++)
    		{
    			ss n(ps.i + dir[i][0], ps.j + dir[i][1]);
    			char ch = 0;
    			if (n.i > -1 && n.i < maze.size() && n.j > -1 && n.j < maze[0].size())
    			{
    				if (maze[n.i][n.j] == 'G')
    					return true;
    				ch = maze[n.i][n.j];
    				if (ch != 'X')
    				{
    					switch(ch)
    					{
    					case 'A': if (key[0] == a) q.push(n);
    						    else door.push(ps); break;
    					case 'B': if (key[1] == b) q.push(n);
    						    else door.push(ps); break;
    					case 'C': if (key[2] == c) q.push(n);
    						    else door.push(ps); break;
    					case 'D': if (key[3] == d) q.push(n);
    						    else door.push(ps); break;
    					case 'E': if (key[4] == e) q.push(n);
    						    else door.push(ps); break;
    					}
    					if (ch == '.')
    					{
    						q.push(n);
    						maze[n.i][n.j] = 'X';
    					}
    					else if (ch == 'a' || ch == 'b' || ch == 'c' || ch == 'd' || ch == 'e')
    					{
    						key[Index(ch)]++;
    						while(!door.empty())
    						{
    							q.push(door.front());
    							door.pop();
    						}
    						q.push(n);
    						maze[n.i][n.j] = 'X';
    					}
    				}
    			}
    		}
    	}
    	return false;
    }
    int main()
    {
    	int i, j;
    	
    	while(1)
    	{
    		a = 0, b = 0, c = 0, d = 0, e = 0;
    		ss ps;
    		cin >> i >> j;
    		if (i == 0 && j == 0)
    			break;
    		vector<vector<char> > maze(i, vector<char>(j));
    		for (int i = 0; i < maze.size(); i++)
    			for( int j = 0; j < maze[0].size(); j++)
    			{
    				cin >> maze[i][j];
    				switch(maze[i][j])
    				{
    				case 'S': ps.startpoint(i, j); break;
    				case 'a': a++; break;
    				case 'b': b++; break;
    				case 'c': c++; break;
    				case 'd': d++; break;
    				case 'e': e++; break;
    				}
    			}
    		if (bfs(maze, ps))
    			cout << "YES" << endl;
    		else
    			cout << "NO" << endl;
    		/*
    		for (int i = 0; i < maze.size(); i++)
    		{
    			for( int j = 0; j < maze[0].size(); j++)
    				cout << maze[i][j] << ' ';
    			cout << endl;
    		}
    		*/
    	}
    	return 0;
    }
    

      

      

  • 相关阅读:
    实现一个圆形进度条
    给你的jQuery项目赋予Router技能吧
    matlab新手入门(四)(翻译)
    matlab新手入门(三)(翻译)
    matlab新手入门(二)(翻译)
    matlab新手入门(一)(翻译)
    安装Matlab出现Error 1935错误解决方法
    Linux Ubuntu下Jupyter Notebook的安装
    lung 分割论文
    链表的回文结构
  • 原文地址:https://www.cnblogs.com/darkchii/p/9215922.html
Copyright © 2020-2023  润新知