pku3083Children of the Candy Corn
模拟的部分写了一下午
写bfs的时候还不知道什么是bfs……
然后去写bfs模板题(记录在前两篇博客里)
然后贴bfs完成后就一直Runtime Error。。。
因为开的数组是 mp[40][40] ,然后数据里正好有 40*40 就杯具的Runtime Error了十多次
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
char mp[45][45];
int X,Y,flag;
// 上 右 下 左 上 右 下 左 上
int dir[11][3]={{-1,0},{0,1},{1,0},{0,-1},{-1,0},{0,1},{1,0},{0,-1},{-1,0},{0,1},{1,0}};
// 1 2 3 4 5 6 7 8 9
struct point
{
int x,y,t;
};
int protect(int x)
{
if(x>=5) while(x>=5) x-=4;
else if(x<=0) while(x<=0) x+=4;
return x;
}
int to(int d,int x,int y,int from)
{
if(d==-1)
{
for(int i=-1;i<=2;i++)
if(mp[y+dir[protect(from+i)][1]][x+dir[protect(from+i)][0]]!='#')
return protect(from+i);
}
else
{
for(int i=1;i>=-2;i--)
if(mp[y+dir[protect(from+i)][1]][x+dir[protect(from+i)][0]]!='#')
return protect(from+i);
}
return 0;
}
void bfs(int x,int y)
{
int i;
point t,tt;
queue<point>Q;
t.x=x;t.y=y;t.t=1;
mp[y][x]='#';
Q.push(t);
while(!Q.empty())
{
t=Q.front();Q.pop();
// printf("%d,%d - %d\n",t.x,t.y,t.t);
for(i=1;i<=4;i++)
{
tt.x=t.x+dir[i][0];
tt.y=t.y+dir[i][1];
tt.t=t.t+1;
if(tt.x<1||tt.x>X||tt.y<1||tt.y>Y||mp[tt.y][tt.x]=='#') continue;
if(mp[tt.y][tt.x]=='E')
{
printf(" %d\n",tt.t);
return;
}
mp[tt.y][tt.x]='#';
Q.push(tt);
}
}
return;
}
int main()
{
int a,b,c,d,i,j,T,Sx,Sy,Sdir,L,R,S,x,y,next;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&X,&Y);
getchar();
for(i=Y;i>=1;i--)
{
for(j=1;j<=X;j++)
{
scanf("%c",&mp[i][j]);
if(mp[i][j]=='S') Sy=i,Sx=j;
}
getchar();
}
//for(i=Y;i>=1;i--) printf("%s\n",mp[i]+1);
//printf("起点 %d %d\n",Sx,Sy);
//while(scanf("%d%d%d%d",&a,&b,&c,&d)) printf("%d\n",to(a,b,c,d));
L=R=S=1;
if(Sx==1) Sdir=2;
else if(Sy==1) Sdir=1;
else if(Sx==X) Sdir=4;
else Sdir=3;
x=Sx,y=Sy,next=Sdir;
while(mp[y][x]!='E')
{
next=to(1,x,y,next);//printf("next=%d",next);
x+=dir[next][0];
y+=dir[next][1];
// printf(" mp(%d,%d) =%c\n",x,y,mp[y][x]);system("pause");
R++;
}
x=Sx,y=Sy,next=Sdir;
while(mp[y][x]!='E')
{
next=to(-1,x,y,next);//printf("next=%d",next);
x+=dir[next][0];
y+=dir[next][1];
// printf(" mp(%d,%d) =%c\n",x,y,mp[y][x]);system("pause");
L++;
}
flag=0;
printf("%d %d",L,R);
bfs(Sx,Sy);
}
return 0;
}
缩减版,,,
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
char mp[45][45];
int X,Y;
int dir[5][2]={{-1,0},{0,1},{1,0},{0,-1},{-1,0}};
struct point{
int x,y,t;
};
int protect(int x)
{
if(x>=5) x-=4;
else if(x<=0) x+=4;
return x;
}
int to(int d,int x,int y,int from)
{
for(int i=-1;i<=2;i++)
if(mp[y+dir[protect(from+-1*d*i)][1]][x+dir[protect(from+-1*d*i)][0]]!='#')
return protect(from+-1*d*i);
return 0;
}
void bfs(int x,int y)
{
int i;
point t,tt;
queue<point>Q;
t.x=x;t.y=y;t.t=1; mp[y][x]='#'; Q.push(t);
while(!Q.empty())
{
t=Q.front();Q.pop();
for(i=1;i<=4;i++)
{
tt.x=t.x+dir[i][0]; tt.y=t.y+dir[i][1]; tt.t=t.t+1;
if(tt.x<1||tt.x>X||tt.y<1||tt.y>Y||mp[tt.y][tt.x]=='#') continue;
if(mp[tt.y][tt.x]=='E')
{
printf(" %d\n",tt.t);
return;
}
mp[tt.y][tt.x]='#'; Q.push(tt);
}
}
}
int main()
{
int i,j,T,Sx,Sy,Sdir,L,R,S,x,y,next;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&X,&Y); getchar();
for(i=Y;i>=1;i--,getchar())
{
for(j=1;j<=X;j++)
{
scanf("%c",&mp[i][j]);
if(mp[i][j]=='S') Sy=i,Sx=j;
}
}
L=R=S=1;
if(Sx==1) Sdir=2;
else if(Sy==1) Sdir=1;
else if(Sx==X) Sdir=4;
else Sdir=3;
x=Sx,y=Sy,next=Sdir;
while(mp[y][x]!='E')
{
next=to(1,x,y,next);
x+=dir[next][0];
y+=dir[next][1];
R++;
}
x=Sx,y=Sy,next=Sdir;
while(mp[y][x]!='E')
{
next=to(-1,x,y,next);
x+=dir[next][0];
y+=dir[next][1];
L++;
}
printf("%d %d",L,R);
bfs(Sx,Sy);
}
return 0;
}
更多详细信息请查看
java教程网 http://www.itchm.com/forum-59-1.html
分享到:
相关推荐
pku_acm3083 Children of the Candy Corn
bfs 2. BNU 1440 --- basic dfs 3. POJ 1190 --- dfs + pruning(Strong) 4. UVALive 2243 --- dfs 5. FZU 2196 --- double bfs 6. PKU 1426 --- bfs + pruning 7. BNU 1038 --- dfs transform 8. PKU 1562 --- dfs ...
Despite the fact that many 3D human activity benchmarks being proposed, most existing action datasets focus on the action recognition tasks for the segmented videos. There is a lack of standard large-...
根据给定的文件信息,我们可以总结出以下关于POJ(PKU)问题2494“Acid Text”以及其Java代码实现的关键知识点: ### 1. POJ(PKU)2494:Acid Text POJ(Peking University Online Judge)是北京大学的一个在线...
pku 3083,思维模拟,全面展现dfs ,bfs思想。
pku acm 2752 Seek the Name, Seek the Fame代码 kmp算法。解题报告:http://blog.csdn.net/china8848
本题为DP 1157 for(i=1;i;i++) { int max=MIN; for(j=i;j<=V-F+i;j++) { for(k=i-1;k;k++) if(max[i-1][k]) max=copy[i-1][k]; copy[i][j]=value[i][j]+max; } }
The_reading_paper_on_something_in_artificial_intel_pku-ai-report-latex-latex.zip
pku acm 1050 To the Max代码,有详细注释,动态规划
两种解决方案 Richard just finished building his new house. Now the only thing the house misses is a cute little wooden fence.... (Note that this makes the top of the fence alternately rise and fall.)
pku2482--Stars in Your Window的源程序
PKU-Chinese-Paraphrase-Corpus中译名著多译本翻译转述语料。语料仅限于用于科研教学活动。文本著作权归原著者。
例如,可能需要模拟物体的生命周期,分析其在不同阶段的行为,或者研究系统随着时间推移的演变。这类问题往往需要参赛者具备扎实的数据结构基础,如链表、树、图,以及对状态转移的理解。 动态规划是解决生命周期...
pku第1002题答案C++ Businesses like to have memorable telephone numbers. One way to make a telephone number memorable is to have it spell a memorable word or phrase. For example, you can call the ...
没钱了,拿点东西出来换点钱...这题的想法是老师在讲最优二元树时偶然想到的...感觉还行
根据给定的信息,本文将对“邮局PKU1160动态规划”这一问题进行深入解析,并结合代码实现过程,详细阐述其中所涉及的重要知识点。 ### 一、题目背景 邮局PKU1160是动态规划领域内一个非常经典的题目。题目主要涉及...
Cr掺杂硼铝酸盐PKU-5催化氧化苯甲硫醚的研究,陈洪伟,杨韬,亚砜在精细有机合成领域是一种重要的中间体。本文采用高温煅烧Cr-PKU-1得到不同Cr掺杂量的Cr-PKU-5硼铝酸盐,并探索了Cr-PKU-5在不同参数�
标题“JOS-PKU-google-Code”暗示了这可能是一个与北京大学(PKU)和谷歌(Google)合作的项目,可能涉及到编程、软件开发或技术教育。"JOS"可能是"Joint Online System"的缩写,也可能是项目或课程的名字,意味着这是一...
标题中的“pku-hrtf-lib.rar_PKU_HRTF_hrtf_libpku项目”表明这是一个关于PKU(北京大学)HRTF(Head-Related Transfer Function)库的压缩文件,用于实现HRIR(Head-Related Impulse Response)效果。HRTF是声音三...