POJ3984 迷宫问题【水BFS】

#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <map>
#include <vector>
using namespace std;
map<string,int>mymap;
map<string,int>::iterator it;

#define LEN 1111
bool visited[LEN];
//bool arc[LEN][LEN];
vector<int> arc[555555];
int degree[LEN];
int n,m;

bool is_v_i(int v,int i)
{
    vector<int>::iterator it=find(arc[v].begin(),arc[v].end(),i);
//    for(it=arc[v].begin();it!=arc[v].end();i++)
//    {
//        if(it)
//    }
    if(it==arc[v].end())
        return false;
    else
        return true;
}

void dfs(int v)         //深度优先遍历
{
    visited[v]=true;
    for(int i=1;i<=n;i++)
    {
        if(!visited[i] && is_v_i(v,i))
        {
            dfs(i);
        }
    }
}

bool isConnected()        //查看遍历后结果
{
    for(int i=1;i<=n;i++)
    {
        if(!visited[i]){return false;}
    }
    return true;
}

bool isCircuit()        //通过度数是否为偶数判断欧拉回路
{
	int oddnum=0;
    for(int i=1;i<=n;i++)
    {
        if(degree[i]%2)
		{
			oddnum++;
			if(oddnum>2)
				return false;
		}
    }
    return true;
}

int main()
{
	#ifndef ONLINE_JUDGE
		freopen("D:/1.txt","r",stdin);
		//freopen("D:/2.txt","w",stdout);
	#endif
	int que=1;
	string s1,s2;
	while(cin>>s1>>s2)
	{
		int p,q;
		it=mymap.find(s1);
		if(it==mymap.end())
		{
			mymap[s1]=que++;
			p=que-1;
		}
		else
		{
			p=it->second;
		}
		it=mymap.find(s2);
		if(it==mymap.end())
		{
			mymap[s2]=que++;
			q=que-1;
		}
		else
		{
			q=it->second;
		}
		degree[p]++;degree[q]++;//没方向的
        //arc[p][q]=arc[q][p]=true;//arc[p][q] ,p,q是否连通
        arc[p].push_back(q);
        arc[q].push_back(p);
	}
	n=que-1;
	dfs(1);
	if(!isConnected())
    {
        cout<<"Impossible"<<'\n';
    }
    else{
        if(isCircuit())
            cout<<"Possible"<<'\n';
        else
            cout<<"Impossible"<<'\n';
        }
	return 0;
}

POJ3984 迷宫问题【水BFS】

时间: 2024-12-22 13:52:26

POJ3984 迷宫问题【水BFS】的相关文章

POJ3984 迷宫问题【BFS】

题目链接: http://poj.org/problem?id=3984 题目大意: 用一个5*5的二维数组表示迷宫,输出左上角到右下角的最短路径. 思路: 用BFS求最短路径.用pre[]来记录每个状态之前的状态,然后递归输出路径. AC代码: #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int Map[6][6

POJ-3984 迷宫问题(BFS找最短路径并保存)

问题: 定义一个二维数组:  int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线. 输入: 一个5 × 5的二维数组,表示一个迷宫.数据保证有唯一解. 输出: 左上角到右下角的最短路径,格式如样例所示. //#include <bi

FZU1205/SDUT1157_小鼠迷宫问题(DFS+BFS)

解题报告 http://blog.csdn.net/juncoder/article/details/38146041 题目传送门 题意 求最短路和最短路的路数. 思路: BFS+DFS,先求出最短路.在DFS搜等于最短路的条数. 不加优化SDUTOJ过了,数据就是水. 确定了最短路的长度,加上奇偶剪枝FOJ也过了. #include <queue> #include <cmath> #include <cstdio> #include <cstring>

搜索问题——POJ3984迷宫问题

Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线. Input 一个5 × 5的二维数组,表示一个迷宫.数据保证有唯一解. Output 左上角到右下角的最短路径,格式如样例所示. Sa

HDU1728 逃离迷宫 【方向BFS】

逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 15120    Accepted Submission(s): 3650 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地

poj3984 迷宫问题(简单的输出路径的bfs)

题目链接 http://poj.org/problem?id=3984 中文题题意不解释了 反正就是简单的结构体套结构体存一下路径就行了 #include <iostream> #include <cstring> #include <deque> #include <queue> using namespace std; int map[6][6]; struct ss { int x , y; }; struct TnT { deque<ss>

(简单) POJ 3984 迷宫问题,BFS。

Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线. 水题,BFS然后记录路径就好. 代码如下: #include<iostream> #include<cstring> #

poj_3984_迷宫问题_(bfs+记录路径)

前两天状态一直很不好,不知道为什么,感觉什么都没有掌握,很想回家.还好,今天调整过来啦,acm,try my best. 前两天一道题都没有ac,不能再这样了,每天都必须有ac. 嗯,说说这道题. 这道题明明就很水,结果我做了一个下午,囧. 迷宫问题 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Description 定义一个二维数组: int maze[5]

迷宫---DFS和BFS解法

题目描述 Description 在N*N的迷宫内,"#"为墙,"."为路,"s"为起点,"e"为终点,一共4个方向可以走.从左上角((0,0)"s")位置处走到右下角((n-1,n-1)"e")位置处,可以走通则输出YES,不可以走则输出NO. 输入描述 Input Description 输入的第一行为一个整数m,表示迷宫的数量. 其后每个迷宫数据的第一行为一个整数n(n≤16),表