这个题其实不难,用的是dfs,杭电的题就是感觉比较容易过,做CDOJ的题就是各种细节。
用一个数组存储走过的地方,思想比较简单。。还是自己考虑问题不太周全。
#include<iostream>
#include<stdlib.h>
#include<math.h>
#include<stdio.h>
#include<algorithm>
#include<queue>
#include<string.h>
#include<stack>
#include<math.h>
#include<string>
#include<stdlib.h>
#include<list>
#include<vector>
using namespace std;
int n;
int from[1000][11];
int to[1000][11];
int l;
int s[11],e[11];
bool vist[100000];
bool ans;
int get(int f[])
{
int sum=0;
for (int i=0;i<n;i++)
sum+=i*11+f[i];
return sum;
}
bool yes(int *a,int *b)
{
/*
for (int i=0;i<n;i++)
cout<<a[i]<<' ';
cout<<" ";
for (int i=0;i<n;i++)
cout<<b[i]<<' ';
cout<<endl;
*/
for (int i=0;i<n;i++)
{
if (a[i]!=b[i])
{
//cout<<i<<endl;
return false;
}
}
return true;
}
void dfs(int *f)
{
int i,j,k;
if (yes(f,e))
{
ans=true;
return ;
}
for (i=0;i<l;i++)
{
k=get(from[i]);
if (!vist[k]&&yes(from[i],f))
{
vist[k]=true;
dfs(to[i]);
vist[k]=false;
}
//cout<<k<<" ";
k=get(to[i]);
//cout<<k<<endl;
if (!vist[k]&&yes(to[i],f))
{
vist[k]=true;
dfs(from[i]);
vist[k]=false;
}
}
}
//hdu1307
void put()
{
int i,j,k;
for (i=0;i<l;i++)
{
for (j=0 ;j<n;j++)
cout<<from[i][j]<<' ';
for (j=0;j<n;j++)
cout<<to[i][j]<<' ';
cout<<endl;
}
}
int main()
{
freopen("fuck.txt","r",stdin);
int i,j,k;
int num=0;
while (cin>>n,n)
{
num++;
l=0;
for (i=0;i<n;i++)
cin>>s[i];
for (i=0;i<n;i++)
cin>>e[i];
while (cin>>k)
{
if (k<0)
break;
from[l][0]=k;
for (i=1;i<n;i++)
cin>>from[l][i];
for (i=0;i<n;i++)
cin>>to[l][i];
l++;
}
//put();
//cout<<l<<endl;
memset(vist,false,sizeof(vist));
ans=false;
//vist[get(s)]=true;
dfs(s);
if (ans)
printf("Maze #%d can be travelled\n",num);
else
printf("Maze #%d cannot be travelled\n",num);
}
}
N-Credible Mazes
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 109 Accepted Submission(s): 70
Problem Description
An n-tersection is defined as a location in n-dimensional space, n being a positive integer, having all non-negative integer coordinates. For example, the location (1,2,3) represents an n-tersection in three dimensional space. Two n-tersections are said to be adjacent if they have the same number of dimensions and their coordinates differ by exactly 1 in a single dimension only. For example, (1,2,3) is adjacent to (0,2,3) and (2,2,3) and (1,2,4), but not to (2,3,3) or (3,2,3) or (1,2). An n-teresting space is defined as a collection of paths between adjacent n-tersections.
Finally, an n-credible maze is defined as an n-teresting space combined with two specific n-tersections in that space, one of which is identified as the starting n-tersection and the other as the ending n-tersection.
Finally, an n-credible maze is defined as an n-teresting space combined with two specific n-tersections in that space, one of which is identified as the starting n-tersection and the other as the ending n-tersection.
Input
The input file will consist of the descriptions of one or more n-credible mazes. The first line of the description will specify n, the dimension of the n-teresting space. (For this problem, n will not exceed 10, and all coordinate values will be less than 10.) The next line will contain 2n non-negative integers, the first n of which describe the starting n-tersection, least dimension first, and the next n of which describe the ending n-tersection. Next will be a nonnegative number of lines containing 2n non-negative integers each, identifying paths between adjacent n-tersections in the n-teresting space. The list is terminated by a line containing only the value ?. Several such maze descriptions may be present in the file. The end of the input is signalled by space dimension of zero. No further data will follow this terminating zero.
Output
For each maze output it's position in the input; e.g. the first maze is "Maze #1", the second is "Maze #2", etc. If it is possible to travel through the n-credible maze's n-teresting space from the starting n-tersection to the ending n-tersection, also output "can be travelled" on the same line. If such travel is not possible, output "cannot be travelled" instead.
Sample Input
2 0 0 2 2 0 0 0 1 0 1 0 2 0 2 1 2 1 2 2 2 -1 3 1 1 1 1 2 3 1 1 2 1 1 3 1 1 3 1 2 3 1 1 1 1 1 0 1 1 0 1 0 0 1 0 0 0 0 0 -1 0
Sample Output
Maze #1 can be travelled Maze #2 cannot be travelled
Source
Recommend
Eddy