广度优先搜索Word文档格式.docx

上传人:b****7 文档编号:21870307 上传时间:2023-02-01 格式:DOCX 页数:8 大小:24.07KB
下载 相关 举报
广度优先搜索Word文档格式.docx_第1页
第1页 / 共8页
广度优先搜索Word文档格式.docx_第2页
第2页 / 共8页
广度优先搜索Word文档格式.docx_第3页
第3页 / 共8页
广度优先搜索Word文档格式.docx_第4页
第4页 / 共8页
广度优先搜索Word文档格式.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

广度优先搜索Word文档格式.docx

《广度优先搜索Word文档格式.docx》由会员分享,可在线阅读,更多相关《广度优先搜索Word文档格式.docx(8页珍藏版)》请在冰豆网上搜索。

广度优先搜索Word文档格式.docx

end;

num:

word;

procedureinit;

vari,j:

ch:

char;

begin

assign(input,'

cell.in'

);

reset(input);

fillchar(b,sizeof(b),false);

=0;

readln(m,n);

fori:

=1tomdo

begin

forj:

=1tondo

read(ch);

ifch<

>

'

0'

thenb[i,j]:

=true;

readln;

close(input);

end;

{init}

procedurefind(newi,newj:

byte);

vark:

head,tail:

b[newi,newj]:

=false;

inc(num);

withque[1]dobegini:

=newi;

j:

=newj;

head:

tail:

=1;

repeat

inc(head);

fork:

=1to4do

if(que[head].i+di[k]in[1..m])and(que[head].j+dj[k]in[1..n])and(b[que[head].i+di[k],que[head].j+dj[k]])then

inc(tail);

withque[tail]dobegini:

=que[head].i+di[k];

=que[head].j+dj[k];

b[que[tail].i,que[tail].j]:

untilhead=tail;

{find}

procedurework;

ifb[i,j]thenfind(i,j);

{work}

procedureprint;

assign(output,'

cell.out'

rewrite(output);

writeln(num);

close(output);

{print;

}

begin{main}

init;

work;

print;

end.

6、营救

铁塔尼号遇险了!

他发出了求救信号。

距离最近的哥伦比亚号收到了讯息,时间就是生命,必须尽快赶到那里。

通过侦测,哥伦比亚号获取了一张海洋图。

这张图将海洋部分分化成n*n个比较小的单位,其中用1标明的是陆地,用0标明是海洋。

船只能从一个格子,移到相邻的四个格子。

为了尽快赶到出事地点,哥伦比亚号最少需要走多远的距离。

【输入格式】

第一行为n,下面是一个n*n的0、1矩阵,表示海洋地图

最后一行为四个小于n的整数,分别表示哥伦比亚号和铁塔尼号的位置。

【输出格式】

哥伦比亚号到铁塔尼号的最短距离,答案精确到整数。

【输入样例】save.in

3

001

101

100

1133

【输出样例】save.out

【数据范围】

N<

=1000

dx:

array[1..4]ofshortint=(1,-1,0,0);

dy:

array[1..4]ofshortint=(0,0,-1,1);

varn,x1,y1,x2,y2:

map:

array[0..1001,0..1001]ofchar;

array[1..1000000]ofrecordx,y,dep:

save.in'

save.out'

fillchar(map,sizeof(map),'

1'

readln(n);

read(map[i,j]);

readln(x1,y1,x2,y2);

varhead,tail:

longword;

i:

withque[1]dobeginx:

=x1;

y:

=y1;

dep:

if(que[head].x+dx[i]>

0)and(que[head].x+dx[i]<

=n)

and(que[head].y+dy[i]>

0)and(que[head].y+dy[i]<

and(map[que[head].x+dx[i],que[head].y+dy[i]]='

)then

withque[tail]dobeginx:

=que[head].x+dx[i];

=que[head].y+dy[i];

=que[head].dep+1end;

map[que[tail].x,que[tail].y]:

='

;

if(que[tail].x=x2)and(que[tail].y=y2)thenbeginwriteln(que[tail].dep);

halt;

7、硬币翻转(coin.pas)

在桌面上有一排硬币,共N枚,每一枚硬币均为正面朝上。

现在要把所有的硬币翻转成反面朝上,规则是每次可翻转任意N-1枚硬币(正面向上的被翻转为反面向上,反之亦然)。

求一个最短的操作序列(将每次翻转N-1枚硬币成为一次操作)。

【输入格式】输入只有一行,包含一个自然数N(N为不大于100的偶数)。

【输出格式】输出文件的第一行包含一个整数S,表示最少需要的操作次数。

接下来的S行每行分别表示每次操作后桌上硬币的状态(一行包含N个整数(0或1),表示每个硬币的状态:

0——正面向上,和1——反面向上,不允许出现多余空格)。

对于有多种操作方案的情况,则只需输出一种。

【样例输入】coin.in

【样例输出】coin.out

0111

1100

0001

1111

varn,head,tail,turn0,turn1:

array[word]ofrecordpre:

n0,turn0:

array[0..100]ofboolean;

coin.in'

vari,j,k:

status:

string[100];

a:

array[word]ofbyte;

coin.out'

writeln(n);

=1tondostatus[i]:

i:

=tail;

inc(j);

a[j]:

=i;

=que[i].pre;

untili=0;

=j-1downto1do

turn0:

=que[a[i]].turn0;

turn1:

=n-1-que[a[i]].turn0;

casestatus[k]of

'

:

ifturn0>

0thenbeginstatus[k]:

dec(turn0);

ifturn1>

dec(turn1);

=ndownto1dowrite(status[k]);

writeln;

{print}

fillchar(b,sizeof(b),true);

b[n]:

que[1].pre:

que[1].n0:

=n;

que[1].turn0:

forturn0:

=0ton-1do

=n-1-turn0;

if(turn0<

=que[head].n0)and(turn1<

=n-que[head].n0)and(b[que[head].n0-turn0+turn1])then

b[que[head].n0-turn0+turn1]:

que[tail].pre:

=head;

que[tail].n0:

=que[head].n0-turn0+turn1;

que[tail].turn0:

=turn0;

ifque[tail].n0=0thenprint;

8、最少转弯问题(TURN.PAS)

给出一张地图,这张地图被分为n×

m(n,m<

=100)个方块,任何一个方块不是平地就是高山。

平地可以通过,高山则不能。

现在你处在地图的(x1,y1)这块平地,问:

你至少需要拐几个弯才能到达目的地(x2,y2)?

你只能沿着水平和垂直方向的平地上行进,拐弯次数就等于行进方向的改变(从水平到垂直或从垂直到水平)的次数。

例如:

如图1,最少的拐弯次数为5。

(x1,y1)

第1行:

m

第2至n+1行:

整个地图地形描述(0:

空地;

1:

高山),

如(图1)第2行地形描述为:

1000010

第3行地形描述为:

0010100

……

第n+2行:

x1y1x2y2(分别为起点、终点坐标)

s(即最少的拐弯次数)

【输入输出样例】

(见图1):

TURN.IN

TURN.OUT

57

1000010

0010100

0000101

0110000

0000110

1317

5

varn,m,x1,y1,x2,y2:

array[0..101,0..101]of0..1;

array[1..10000]ofrecordx,y,turns:

shortint;

turn.in'

turn.out'

fillchar(map,sizeof(map),1);

readln(n,m);

if(x1=x2)and(y1=y2)thenbeginwriteln(0);

procedurego(newx,newy:

=newx;

=newy;

turns:

=que[head].turns+1;

if(newx=x2)and(newy=y2)thenbeginwriteln(que[tail].turns);

map[newx,newy]:

{go}

vard:

=-1;

d:

=que[head].x-1;

whilemap[d,que[head].y]=0dobegingo(d,que[head].y);

dec(d);

=que[head].x+1;

inc(d);

=que[head].y-1;

whilemap[que[head].x,d]=0dobegingo(que[head].x,d);

=que[head].y+1;

.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1