| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:04年PKU比赛我当场写了个12K的程序AC了个题目In Reply To:04年PKU比赛我当场写了个12K的程序AC了个题目 Posted by:LIANGLIANG at 2006-11-17 20:31:10 Source Code
Problem: 3083 User: sunyuanshuai
Memory: N/A Time: N/A
Language: C++ Result: Wrong Answer
Source Code
#include<iostream>
#include<stack>
#include<queue>
using namespace std;
struct Point
{
int x,y;
int direction;//决定下一的左右
};
Point create(int a,int b,int c=0)
{
Point p;
p.x=a;
p.y=b;
p.direction=c;
return p;
}
int main()
{
int num;
cin>>num;
while(num--)
{
Point start,end;
int r,c,i,j,maze_l[40][40]={0},maze_r[40][40]={0},maze_b[40][40]={0};
cin>>c>>r;
char ch;//迷宫中0同,1不通,-1表示开始,-2表示结束
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
cin>>ch;
if(ch=='#')
{
maze_l[i][j]=1;
maze_r[i][j]=1;
maze_b[i][j]=1;
}
else if(ch=='.')
{
maze_l[i][j]=0;
maze_r[i][j]=0;
maze_b[i][j]=0;
}
else if(ch=='S')
{
maze_l[i][j]=-1;
maze_r[i][j]=-1;
maze_b[i][j]=-1;
start=create(i,j);
}
else if(ch=='E')
{
maze_l[i][j]=-2;
maze_r[i][j]=-2;
maze_b[i][j]=-2;
end=create(i,j);
}
}
}
int length_l=1,length_r=1,length_b=1;
int a,b;
//向左深搜
stack<Point> st_l;
if(start.x==0)
start.direction=1;
else if(start.x==r-1)
start.direction=2;
else if(start.y==0)
start.direction=3;
else if(start.y==c-1)
start.direction=4;
st_l.push(start);
while(1)
{
if(st_l.empty())
break;
if(st_l.top().direction==1)
{
if((maze_l[st_l.top().x][st_l.top().y+1]==0&&st_l.top().y!=c-1)||maze_l[st_l.top().x][st_l.top().y+1]==-2)
{
if(maze_l[st_l.top().x][st_l.top().y+1]==-2)
{
length_l++;
break;
}
maze_l[st_l.top().x][st_l.top().y+1]=1;
st_l.push(create(st_l.top().x,st_l.top().y+1,3));
length_l++;
}
else if((maze_l[st_l.top().x+1][st_l.top().y]==0&&st_l.top().x!=r-1)||maze_l[st_l.top().x+1][st_l.top().y]==-2)
{
if(maze_l[st_l.top().x+1][st_l.top().y]==-2)
{
length_l++;
break;
}
maze_l[st_l.top().x+1][st_l.top().y]=1;
st_l.push(create(st_l.top().x+1,st_l.top().y,1));
length_l++;
}
else if((maze_l[st_l.top().x][st_l.top().y-1]==0&&st_l.top().y!=0)||maze_l[st_l.top().x][st_l.top().y-1]==-2)
{
if(maze_l[st_l.top().x][st_l.top().y-1]==-2)
{
length_l++;
break;
}
maze_l[st_l.top().x][st_l.top().y-1]=1;
st_l.push(create(st_l.top().x,st_l.top().y-1,4));
length_l++;
}
else if((maze_l[st_l.top().x-1][st_l.top().y]==0&&st_l.top().x!=0)||maze_l[st_l.top().x-1][st_l.top().y]==-2)
{
if(maze_l[st_l.top().x-1][st_l.top().y]==-2)
{
length_l++;
break;
}
maze_l[st_l.top().x-1][st_l.top().y]=1;
st_l.push(create(st_l.top().x-1,st_l.top().y,2));
length_l++;
}
else
{
length_l++;
a=st_l.top().x,b=st_l.top().y;
st_l.pop();
if(st_l.top().x>a)
st_l.top().direction=1;
else if(st_l.top().x<a)
st_l.top().direction=2;
else if(st_l.top().y>b)
st_l.top().direction=3;
else if(st_l.top().y<b)
st_l.top().direction=4;
}
}
else if(st_l.top().direction==2)
{
if((maze_l[st_l.top().x][st_l.top().y-1]==0&&st_l.top().y!=0)||maze_l[st_l.top().x][st_l.top().y-1]==-2)
{
if(maze_l[st_l.top().x][st_l.top().y-1]==-2)
{
length_l++;
break;
}
maze_l[st_l.top().x][st_l.top().y-1]=1;
st_l.push(create(st_l.top().x,st_l.top().y-1,4));
length_l++;
}
else if((maze_l[st_l.top().x-1][st_l.top().y]==0&&st_l.top().x!=0)||maze_l[st_l.top().x-1][st_l.top().y]==-2)
{
if(maze_l[st_l.top().x-1][st_l.top().y]==-2)
{
length_l++;
break;
}
maze_l[st_l.top().x-1][st_l.top().y]=1;
st_l.push(create(st_l.top().x-1,st_l.top().y,2));
length_l++;
}
else if((maze_l[st_l.top().x][st_l.top().y+1]==0&&st_l.top().y!=c-1)||maze_l[st_l.top().x][st_l.top().y+1]==-2)
{
if(maze_l[st_l.top().x][st_l.top().y+1]==-2)
{
length_l++;
break;
}
maze_l[st_l.top().x][st_l.top().y+1]=1;
st_l.push(create(st_l.top().x,st_l.top().y+1,3));
length_l++;
}
else if((maze_l[st_l.top().x+1][st_l.top().y]==0&&st_l.top().x!=r-1)||maze_l[st_l.top().x+1][st_l.top().y]==-2)
{
if(maze_l[st_l.top().x+1][st_l.top().y]==-2)
{
length_l++;
break;
}
maze_l[st_l.top().x+1][st_l.top().y]=1;
st_l.push(create(st_l.top().x+1,st_l.top().y,1));
length_l++;
}
else
{
length_l++;
a=st_l.top().x,b=st_l.top().y;
st_l.pop();
if(st_l.top().x>a)
st_l.top().direction=1;
else if(st_l.top().x<=a)
st_l.top().direction=2;
else if(st_l.top().y>b)
st_l.top().direction=3;
else if(st_l.top().y<b)
st_l.top().direction=4;
}
}
else if(st_l.top().direction==3)
{
if((maze_l[st_l.top().x-1][st_l.top().y]==0&&st_l.top().x!=0)||maze_l[st_l.top().x-1][st_l.top().y]==-2)
{
if(maze_l[st_l.top().x-1][st_l.top().y]==-2)
{
length_l++;
break;
}
maze_l[st_l.top().x-1][st_l.top().y]=1;
st_l.push(create(st_l.top().x-1,st_l.top().y,2));
length_l++;
}
else if((maze_l[st_l.top().x][st_l.top().y+1]==0&&st_l.top().y!=c-1)||maze_l[st_l.top().x][st_l.top().y+1]==-2)
{
if(maze_l[st_l.top().x][st_l.top().y+1]==-2)
{
length_l++;
break;
}
maze_l[st_l.top().x][st_l.top().y+1]=1;
st_l.push(create(st_l.top().x,st_l.top().y+1,3));
length_l++;
}
else if((maze_l[st_l.top().x+1][st_l.top().y]==0&&st_l.top().x!=r-1)||maze_l[st_l.top().x+1][st_l.top().y]==-2)
{
if(maze_l[st_l.top().x+1][st_l.top().y]==-2)
{
length_l++;
break;
}
maze_l[st_l.top().x+1][st_l.top().y]=1;
st_l.push(create(st_l.top().x+1,st_l.top().y,1));
length_l++;
}
else if((maze_l[st_l.top().x][st_l.top().y-1]==0&&st_l.top().y!=0)||maze_l[st_l.top().x][st_l.top().y-1]==-2)
{
if(maze_l[st_l.top().x][st_l.top().y-1]==-2)
{
length_l++;
break;
}
maze_l[st_l.top().x][st_l.top().y-1]=1;
st_l.push(create(st_l.top().x,st_l.top().y-1,4));
length_l++;
}
else
{
length_l++;
a=st_l.top().x,b=st_l.top().y;
st_l.pop();
if(st_l.top().x>a)
st_l.top().direction=1;
else if(st_l.top().x<=a)
st_l.top().direction=2;
else if(st_l.top().y>b)
st_l.top().direction=3;
else if(st_l.top().y<b)
st_l.top().direction=4;
}
}
else if(st_l.top().direction==4)
{
if((maze_l[st_l.top().x+1][st_l.top().y]==0&&st_l.top().x!=r-1)||maze_l[st_l.top().x+1][st_l.top().y]==-2)
{
if(maze_l[st_l.top().x+1][st_l.top().y]==-2)
{
length_l++;
break;
}
maze_l[st_l.top().x+1][st_l.top().y]=1;
st_l.push(create(st_l.top().x+1,st_l.top().y,1));
length_l++;
}
else if((maze_l[st_l.top().x][st_l.top().y-1]==0&&st_l.top().y!=0)||maze_l[st_l.top().x][st_l.top().y-1]==-2)
{
if(maze_l[st_l.top().x][st_l.top().y-1]==-2)
{
length_l++;
break;
}
maze_l[st_l.top().x][st_l.top().y-1]=1;
st_l.push(create(st_l.top().x,st_l.top().y-1,4));
length_l++;
}
else if((maze_l[st_l.top().x-1][st_l.top().y]==0&&st_l.top().x!=0)||maze_l[st_l.top().x-1][st_l.top().y]==-2)
{
if(maze_l[st_l.top().x-1][st_l.top().y]==-2)
{
length_l++;
break;
}
maze_l[st_l.top().x-1][st_l.top().y]=1;
st_l.push(create(st_l.top().x-1,st_l.top().y,2));
length_l++;
}
else if((maze_l[st_l.top().x][st_l.top().y+1]==0&&st_l.top().y!=c-1)||maze_l[st_l.top().x][st_l.top().y+1]==-2)
{
if(maze_l[st_l.top().x][st_l.top().y+1]==-2)
{
length_l++;
break;
}
maze_l[st_l.top().x][st_l.top().y+1]=1;
st_l.push(create(st_l.top().x,st_l.top().y+1,3));
length_l++;
}
else
{
length_l++;
a=st_l.top().x,b=st_l.top().y;
st_l.pop();
if(st_l.top().x>a)
st_l.top().direction=1;
else if(st_l.top().x<=a)
st_l.top().direction=2;
else if(st_l.top().y>b)
st_l.top().direction=3;
else if(st_l.top().y<b)
st_l.top().direction=4;
}
}
}
//向右深搜
stack<Point> st_r;
st_r.push(start);
while(1)
{
if(st_r.empty())
break;
if(st_r.top().direction==1)
{
if((maze_r[st_r.top().x][st_r.top().y-1]==0&&st_r.top().y!=0)||maze_r[st_r.top().x][st_r.top().y-1]==-2)
{
if(maze_r[st_r.top().x][st_r.top().y-1]==-2)
{
length_r++;
break;
}
maze_r[st_r.top().x][st_r.top().y-1]=1;
st_r.push(create(st_r.top().x,st_r.top().y-1,4));
length_r++;
}
else if((maze_r[st_r.top().x-1][st_r.top().y]==0&&st_r.top().x!=0)||maze_r[st_r.top().x-1][st_r.top().y]==-2)
{
if(maze_r[st_r.top().x-1][st_r.top().y]==-2)
{
length_r++;
break;
}
maze_r[st_r.top().x-1][st_r.top().y]=1;
st_r.push(create(st_r.top().x-1,st_r.top().y,2));
length_r++;
}
else if((maze_r[st_r.top().x][st_r.top().y+1]==0&&st_r.top().y!=c-1)||maze_r[st_r.top().x][st_r.top().y+1]==-2)
{
if(maze_r[st_r.top().x][st_r.top().y+1]==-2)
{
length_r++;
break;
}
maze_r[st_r.top().x][st_r.top().y+1]=1;
st_r.push(create(st_r.top().x,st_r.top().y+1,3));
length_r++;
}
else if((maze_r[st_r.top().x+1][st_r.top().y]==0&&st_r.top().x!=r-1)||maze_r[st_r.top().x+1][st_r.top().y]==-2)
{
if(maze_r[st_r.top().x+1][st_r.top().y]==-2)
{
length_r++;
break;
}
maze_r[st_r.top().x+1][st_r.top().y]=1;
st_r.push(create(st_r.top().x+1,st_r.top().y,1));
length_r++;
}
else
{
length_r++;
a=st_r.top().x,b=st_r.top().y;
st_r.pop();
if(st_r.top().x>a)
st_r.top().direction=1;
else if(st_r.top().x<=a)
st_r.top().direction=2;
else if(st_r.top().y>b)
st_r.top().direction=3;
else if(st_r.top().y<b)
st_r.top().direction=4;
}
}
else if(st_r.top().direction==2)
{
if((maze_r[st_r.top().x][st_r.top().y+1]==0&&st_r.top().y!=c-1)||maze_r[st_r.top().x][st_r.top().y+1]==-2)
{
if(maze_r[st_r.top().x][st_r.top().y+1]==-2)
{
length_r++;
break;
}
maze_r[st_r.top().x][st_r.top().y+1]=1;
st_r.push(create(st_r.top().x,st_r.top().y+1,3));
length_r++;
}
else if((maze_r[st_r.top().x+1][st_r.top().y]==0&&st_r.top().x!=r-1)||maze_r[st_r.top().x+1][st_r.top().y]==-2)
{
if(maze_r[st_r.top().x+1][st_r.top().y]==-2)
{
length_r++;
break;
}
maze_r[st_r.top().x+1][st_r.top().y]=1;
st_r.push(create(st_r.top().x+1,st_r.top().y,1));
length_r++;
}
else if((maze_r[st_r.top().x][st_r.top().y-1]==0&&st_r.top().y!=0)||maze_r[st_r.top().x][st_r.top().y-1]==-2)
{
if(maze_r[st_r.top().x][st_r.top().y-1]==-2)
{
length_r++;
break;
}
maze_r[st_r.top().x][st_r.top().y-1]=1;
st_r.push(create(st_r.top().x,st_r.top().y-1,4));
length_r++;
}
else if((maze_r[st_r.top().x-1][st_r.top().y]==0&&st_r.top().x!=0)||maze_r[st_r.top().x-1][st_r.top().y]==-2)
{
if(maze_r[st_r.top().x-1][st_r.top().y]==-2)
{
length_r++;
break;
}
maze_r[st_r.top().x-1][st_r.top().y]=1;
st_r.push(create(st_r.top().x-1,st_r.top().y,2));
length_r++;
}
else
{
length_r++;
a=st_r.top().x,b=st_r.top().y;
st_r.pop();
if(st_r.top().x>a)
st_r.top().direction=1;
else if(st_r.top().x<=a)
st_r.top().direction=2;
else if(st_r.top().y>b)
st_r.top().direction=3;
else if(st_r.top().y<b)
st_r.top().direction=4;
}
}
else if(st_r.top().direction==3)
{
if((maze_r[st_r.top().x+1][st_r.top().y]==0&&st_r.top().x!=r-1)||maze_r[st_r.top().x+1][st_r.top().y]==-2)
{
if(maze_r[st_r.top().x+1][st_r.top().y]==-2)
{
length_r++;
break;
}
maze_r[st_r.top().x+1][st_r.top().y]=1;
st_r.push(create(st_r.top().x+1,st_r.top().y,1));
length_r++;
}
else if((maze_r[st_r.top().x][st_r.top().y-1]==0&&st_r.top().y!=0)||maze_r[st_r.top().x][st_r.top().y-1]==-2)
{
if(maze_r[st_r.top().x][st_r.top().y-1]==-2)
{
length_r++;
break;
}
maze_r[st_r.top().x][st_r.top().y-1]=1;
st_r.push(create(st_r.top().x,st_r.top().y-1,4));
length_r++;
}
else if((maze_r[st_r.top().x-1][st_r.top().y]==0&&st_r.top().x!=0)||maze_r[st_r.top().x-1][st_r.top().y]==-2)
{
if(maze_r[st_r.top().x-1][st_r.top().y]==-2)
{
length_r++;
break;
}
maze_r[st_r.top().x-1][st_r.top().y]=1;
st_r.push(create(st_r.top().x-1,st_r.top().y,2));
length_r++;
}
else if((maze_r[st_r.top().x][st_r.top().y+1]==0&&st_r.top().y!=c-1)||maze_r[st_r.top().x][st_r.top().y+1]==-2)
{
if(maze_r[st_r.top().x][st_r.top().y+1]==-2)
{
length_r++;
break;
}
maze_r[st_r.top().x][st_r.top().y+1]=1;
st_r.push(create(st_r.top().x,st_r.top().y+1,3));
length_r++;
}
else
{
length_r++;
a=st_r.top().x,b=st_r.top().y;
st_r.pop();
if(st_r.top().x>a)
st_r.top().direction=1;
else if(st_r.top().x<=a)
st_r.top().direction=2;
else if(st_r.top().y>b)
st_r.top().direction=3;
else if(st_r.top().y<b)
st_r.top().direction=4;
}
}
if(st_r.top().direction==4)
{
if((maze_r[st_r.top().x-1][st_r.top().y]==0&&st_r.top().x!=0)||maze_r[st_r.top().x-1][st_r.top().y]==-2)
{
if(maze_r[st_r.top().x-1][st_r.top().y]==-2)
{
length_r++;
break;
}
maze_r[st_r.top().x-1][st_r.top().y]=1;
st_r.push(create(st_r.top().x-1,st_r.top().y,2));
length_r++;
}
else if((maze_r[st_r.top().x][st_r.top().y+1]==0&&st_r.top().y!=c-1)||maze_r[st_r.top().x][st_r.top().y+1]==-2)
{
if(maze_r[st_r.top().x][st_r.top().y+1]==-2)
{
length_r++;
break;
}
maze_r[st_r.top().x][st_r.top().y+1]=1;
st_r.push(create(st_r.top().x,st_r.top().y+1,3));
length_r++;
}
else if((maze_r[st_r.top().x+1][st_r.top().y]==0&&st_r.top().x!=r-1)||maze_r[st_r.top().x+1][st_r.top().y]==-2)
{
if(maze_r[st_r.top().x+1][st_r.top().y]==-2)
{
length_r++;
break;
}
maze_r[st_r.top().x+1][st_r.top().y]=1;
st_r.push(create(st_r.top().x+1,st_r.top().y,1));
length_r++;
}
else if((maze_r[st_r.top().x][st_r.top().y-1]==0&&st_r.top().y!=0)||maze_r[st_r.top().x][st_r.top().y-1]==-2)
{
if(maze_r[st_r.top().x][st_r.top().y-1]==-2)
{
length_r++;
break;
}
maze_r[st_r.top().x][st_r.top().y-1]=1;
st_r.push(create(st_r.top().x,st_r.top().y-1,4));
length_r++;
}
else
{
length_r++;
a=st_r.top().x,b=st_r.top().y;
st_r.pop();
if(st_r.top().x>a)
st_r.top().direction=1;
else if(st_r.top().x<=a)
st_r.top().direction=2;
else if(st_r.top().y>b)
st_r.top().direction=3;
else if(st_r.top().y<b)
st_r.top().direction=4;
}
}
}
//广搜球最短路径长度
Point flag=create(-1,-1);
queue<Point> qu;
maze_b[start.x][start.y]=1;
qu.push(start);
qu.push(flag);
while(1)
{
if(maze_b[qu.front().x][qu.front().y+1]==-2)
{
length_b++;
break;
}
if(maze_b[qu.front().x][qu.front().y+1]==0&&qu.front().y!=c-1)
{
maze_b[qu.front().x][qu.front().y+1]=1;
qu.push(create(qu.front().x,qu.front().y+1));
}
if(maze_b[qu.front().x+1][qu.front().y]==-2)
{
length_b++;
break;
}
if(maze_b[qu.front().x+1][qu.front().y]==0&&qu.front().x!=r-1)
{
maze_b[qu.front().x+1][qu.front().y]=1;
qu.push(create(qu.front().x+1,qu.front().y));
}
if(maze_b[qu.front().x][qu.front().y-1]==-2)
{
length_b++;
break;
}
if(maze_b[qu.front().x][qu.front().y-1]==0&&qu.front().y!=0)
{
maze_b[qu.front().x][qu.front().y-1]=1;
qu.push(create(qu.front().x,qu.front().y-1));
}
if(maze_b[qu.front().x-1][qu.front().y]==-2)
{
length_b++;
break;
}
if(maze_b[qu.front().x-1][qu.front().y]==0&&qu.front().x!=0)
{
maze_b[qu.front().x-1][qu.front().y]=1;
qu.push(create(qu.front().x-1,qu.front().y));
}
qu.pop();
if(qu.front().x==-1&&qu.front().y==-1)
{
length_b++;
qu.pop();
qu.push(flag);
if(qu.size()==0)
break;
}
}
cout<<length_l<<" "<<length_r<<" "<<length_b<<endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator