| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5537 人关注过本帖
标题:第十八期编程比赛
只看楼主 加入收藏
ACKing
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2007-9-4
收藏
得分:0 
回复:(crackerwang)以下是引用ACKing在2007-9-14 1...
深搜或者广搜都可以啦,这个题和一般的深搜广搜不同的是同一个格子能多次经过,记录状态的时候要加上当前已经打了的小怪物的数目和距离就ok了。。。。+点剪枝上去应该问题就不大了
2007-09-14 23:27
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 
跟重要的是要纪录图吧.
不同的路线导致打的怪也不一样.

2007-09-14 23:35
ACKing
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2007-9-4
收藏
得分:0 
图有什么难记录的?
2007-09-15 00:18
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
那个提高的第一题用 广度优先搜索+剪枝(去重复路径,去已走过的方式,去状态相同),10S的时间应该够用,不过有可能空间不足

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-09-15 07:46
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 

恩.
我就是保存图的时候空间不足了..


2007-09-15 08:58
ACKing
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2007-9-4
收藏
得分:0 
。。。。。终于过了。。。。我太白痴了。。。这么简单的题都要做那么久
2007-09-15 09:03
ACKing
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2007-9-4
收藏
得分:0 
其实这题搜索不难,但是题目不错。。。
2007-09-15 09:04
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
代码的内聚搞的不好,很多耦合,不过算是出来了:

#include<stdio.h>
#include<string.h>
/*
'.'代表没有怪物,'o'代表有小怪,'O'代表大怪,'#'代表的是不能走的石头
*/
struct
{
char mapnow[8][8];
char small;
char x,y;
char l;
} line[150000]={0};
int linenow=0;
int maxline=1;
int main(void)
{
int m,mm,n,nn,k;
int i,j;
scanf("%d%d%d",&m,&n,&k);
for(i=0;i<m;i++) scanf("%s",line[linenow].mapnow[i]);
if(line[linenow].mapnow[0][0]=='o') line[linenow].small++;
if(line[linenow].mapnow[0][0]=='O')
if(k==0) line[linenow].small++; else { printf("-1"); return 0; }
if(line[linenow].mapnow[0][0]=='#') { printf("-1"); return 0; }
line[linenow].mapnow[0][0]='.';
line[linenow].x=0;
line[linenow].y=0;
line[linenow].l++;
if(line[linenow].x==m && line[linenow].y==n) { printf("1"); return 0; }
mm=m-1;
nn=n-1;
for(linenow=0;linenow<maxline;linenow++)
{
if(line[linenow].x<mm)
{
if(line[linenow].mapnow[line[linenow].x+1][line[linenow].y]=='o')
{
line[maxline]=line[linenow];
line[maxline].x++;
line[maxline].mapnow[line[maxline].x][line[maxline].y]='.';
line[maxline].small++;
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); return 0; }
//printf("%d ",line[maxline].l);
maxline++;
}
else
if(line[linenow].mapnow[line[linenow].x+1][line[linenow].y]=='.')
{
line[maxline]=line[linenow];
line[maxline].x++;
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); return 0; }
//printf("%d ",line[maxline].l);
maxline++;
}
else
if(line[linenow].mapnow[line[linenow].x+1][line[linenow].y]=='O' && line[linenow].small>=k)
{
line[maxline]=line[linenow];
line[maxline].x++;
line[maxline].mapnow[line[maxline].x][line[maxline].y]='.';
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
}
if(line[linenow].x>0)
{
if(line[linenow].mapnow[line[linenow].x-1][line[linenow].y]=='o')
{
line[maxline]=line[linenow];
line[maxline].x--;
line[maxline].mapnow[line[maxline].x][line[maxline].y]='.';
line[maxline].small++;
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
else
if(line[linenow].mapnow[line[linenow].x-1][line[linenow].y]=='.')
{
line[maxline]=line[linenow];
line[maxline].x--;
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
else
if(line[linenow].mapnow[line[linenow].x-1][line[linenow].y]=='O' && line[linenow].small>=k)
{
line[maxline]=line[linenow];
line[maxline].x--;
line[maxline].mapnow[line[maxline].x][line[maxline].y]='.';
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
}
if(line[linenow].y<nn)
{
if(line[linenow].mapnow[line[linenow].x][line[linenow].y+1]=='o')
{
line[maxline]=line[linenow];
line[maxline].y++;
line[maxline].mapnow[line[maxline].x][line[maxline].y]='.';
line[maxline].small++;
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
else
if(line[linenow].mapnow[line[linenow].x][line[linenow].y+1]=='.')
{
line[maxline]=line[linenow];
line[maxline].y++;
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
else
if(line[linenow].mapnow[line[linenow].x][line[linenow].y+1]=='O' && line[linenow].small>=k)
{
line[maxline]=line[linenow];
line[maxline].y++;
line[maxline].mapnow[line[maxline].x][line[maxline].y]='.';
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
}
if(line[linenow].y>0)
{
if(line[linenow].mapnow[line[linenow].x][line[linenow].y-1]=='o')
{
line[maxline]=line[linenow];
line[maxline].y--;
line[maxline].mapnow[line[maxline].x][line[maxline].y]='.';
line[maxline].small++;
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
else
if(line[linenow].mapnow[line[linenow].x][line[linenow].y-1]=='.')
{
line[maxline]=line[linenow];
line[maxline].y--;
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
else
if(line[linenow].mapnow[line[linenow].x][line[linenow].y-1]=='O' && line[linenow].small>=k)
{
line[maxline]=line[linenow];
line[maxline].y--;
line[maxline].mapnow[line[maxline].x][line[maxline].y]='.';
line[maxline].l++;
if(line[maxline].x==mm && line[maxline].y==nn) { printf("%d",line[maxline].l); goto end; }
//printf("%d ",line[maxline].l);
maxline++;
}
}
if(maxline>100000) { printf("-1"); goto end; }
}
end:
return 0;
}

My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-09-15 09:14
ACKing
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2007-9-4
收藏
得分:0 
楼上的明显不会通过。。。
2007-09-15 09:25
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用ACKing在2007-9-15 9:25:54的发言:
楼上的明显不会通过。。。

提交了,时间为0...Wrong answer...为什么?


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-09-15 09:27
快速回复:第十八期编程比赛
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021553 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved