给我一个最简单的宽搜程序和题目,PASCAL语言

作者&投稿:象厚 (若有异议请与网页底部的电邮联系)
Pascal语言编程题目 快!快!快!快!快!~

int inthestr(char *s,char ch)
{
while(*s!='\0'){
if(*s==ch)
return 1;
s++;
}
return 0;
}

先做一个
题三

Program succor;
var a,b:array[1..100] of longint;
m,i,j:integer;
t,n:longint;
f:boolean;
fg,eg:text;

Begin
assign(fg,'succor.in');
reset(fg);
assign(eg,'succor.out');
rewrite(eg);
readln(m);
read(fg,a[1]); b[1]:=1;
i:=1;
repeat
i:=i+1;
b[i]:=0; f:=true;
read(fg,n);
for j:=1 to i-1 do
if n=a[j] then begin b[j]:=b[j]+1; f:=false; end;
if f then begin a[i]:=n; b[i]:=b[i]+1; end;
until i=m;
for i:=1 to m-1 do
for j:=i+1 to m do begin
if b[i]<b[j] then begin
t:=a[i]; a[i]:=a[j]; a[j]:=t;
t:=b[i]; b[i]:=b[j]; b[j]:=t; end;
if b[i]=b[j] then
if a[i]>a[j] then
begin t:=a[i]; a[i]:=a[j]; a[j]:=t; end;
end;
write(eg,a[1]);
for i:=2 to m do if a[i]0 then
write(eg,'->',a[i]);
close(fg);
close(eg);

Writeln('Press [Enter] to continue ... ');
Readln;
End.

骑士问题
输入文件:knight.in
输出文件:knight.out
问题描述:
在一个标准8*8的图际象棋棋盘上,棋盘中有些格子可能是有障碍物的。已知骑士的初始位置和目标位置,你的任务是计算出骑士最少需要多少步可以从初始位置到达目标位置。有障碍物的格子当然不可以到达。
标准的8*8的国际象棋棋盘中每一个格子可以用唯一的编号确定。行用1-8这8个数字依次表示,列用’a’—‘h’这8个字母依次表示。例如左下图的骑士所在位置(图中有n的格子)的编号为“d4”(注意’d’和’4’之间没有空格)。

我们知道国际象棋中的骑士可以按“L”路线移动(一个方向走2个格子,接着垂直方向走1个格子)。因此,如左上图中的骑士(位于d4),可以到达位置c2、b3、b5、c6、e6、f5、f3和e2(图中有’x’)标记的格子)。此外,骑士不能移出棋盘。
骑士可以按照移动规则自由地在棋盘上没有障碍物的格子中移动,右上图给出了一个骑士移动的例子。初始格子用’n’标记,目标格子用’N’标记,有障碍物的格子用’b’标记。一个可行的移动序列在图中用数字标记出来。(a1,b3,a5,c6,e5,g4,h2,f1)。总共需要7步才能完成。事实上,这也就是最小的步数了。
输入格式:
输入文件包括1个或多个测试数据。
每一个测试数据的第一行是一个整数b(-1<=b<=62),表示棋盘中有障碍物的格子数目,当b=-1时,输入文件结束。
第二行含b个不同的有障碍物的格子编号,用空格隔开。当b=0时,此行为空行。
第三行是骑士的初始格子和目标格子的编号,也是用空格隔开。初始格子和目标格子是不同的,且都没有障碍物。
输出格式:
对于每个数据,输出一行。格式:Board n: m moves
其中n表示数据的序号(从1开始)m表示骑士所用的最小的步数。
如果骑士无法到达目标格子,输出:Board n: not reachable
输入样例:
10
c1 d1 d5 c2 c3 c4 d2 d3 d4 c5
a1 f1
0

c1 b3
2
b3 c2
a1 b2
-1
输出样例:
Board 1:7 moves
Board 2:1 moves
Board 3:not reachable
宽搜(骑士问题)
const f:array[1..8,1..2]of integer=((-2,-1),(-1,-2),(1,-2),(2,-1),(2,1),(1,2),(-1,2),(-2,1));
type zb=record
i:integer;
j:integer;
bu:integer;
end;
var b,i,j,k,answer:integer;
pan:array[-1..10,-1..10]of boolean;
start,finish:zb;
qi:array[1..100000]of zb;
can:boolean;

procedure zhuan(s:string;var i,j:integer);
begin
i:=ord(s[2])-ord('0');
j:=ord(s[1])-ord('a')+1;
end;

procedure init;
var s,sub:string;
i,j:integer;
begin
readln(s);
if s<>'' then
repeat
sub:=copy(s,1,2);
zhuan(sub,i,j);
pan[i,j]:=false;
delete(s,1,3);
until s='';
readln(s);
sub:=copy(s,1,2);
zhuan(sub,start.i,start.j);
sub:=copy(s,4,2);
zhuan(sub,finish.i,finish.j);
end;

function ok(i,j:integer):boolean;
begin
if (i>0) and (i<9) and (j>0) and (j<9) and pan[i,j] then ok:=true else ok:=false;
end;

procedure work;
var p,q,i:integer;
qs,kz:zb;
pd:boolean;
begin
p:=0;
q:=1;
qi[1].i:=start.i;
qi[1].j:=start.j;
qi[1].bu:=0;
can:=true;
pd:=false;
repeat
inc(p);
qs:=qi[p];
for i:=1 to 8 do
begin
kz.i:=qs.i+f[i,1];
kz.j:=qs.j+f[i,2];
if ok(kz.i,kz.j) then
begin
pan[kz.i,kz.j]:=false;
inc(q);
qi[q].i:=kz.i;
qi[q].j:=kz.j;
qi[q].bu:=qi[p].bu+1;
if (kz.i=finish.i) and (kz.j=finish.j) then
begin
pd:=true;
answer:=qi[q].bu;
end;
end;
end;
until (p=q) or (pd);
if p=q then can:=false;
end;

procedure print;
begin
if can then writeln(answer,' moves') else writeln('not reachable');
end;

begin
assign(input,'knight.in'); reset(input);
assign(output,'knight.out'); rewrite(output);
k:=0;
repeat
readln(b);
inc(k);
if b<>-1 then
begin
write('Board ',k,': ');
for i:=1 to 8 do
for j:=1 to 8 do pan[i,j]:=true;
init;
work;
print;
end;
until b=-1;
close(input);
close(output);
end.

迷宫. 网上有的是... 自己搜搜吧

马拦过河卒问题


一个人生活,怎样才能把日子过得优雅而且有品位?
这个啊是因人而异的!!你啊!肺气燥热!为人开朗!胃稍稍不适合!血压低!朋友不是很多!有能力!给自己定个小目标!做事有计划!!照顾好自己的日常起居!吃好早餐!适当多学点技能!充实业余时间!多谢时间陪陪父母家人!多教交些志同道合的朋友闺蜜!说话不要说的太满!

大家快帮我一个忙,追加赏分
就是我上网的时候老是谈出一个窗口,只要一点它就掉线一个是应用程序出现错误Oxc0000409(位置Ox5fdda3c0)还有一个是Ox7c9311de指令引用的Ox36b2283内存该内存不能为“read”终止按确定... 就是我上网的时候老是谈出一个窗口,只要一点它就掉线一个是应用程序出现错误 Oxc0000409(位置Ox5fdda3c0)还有一个是Ox...

怎么将一个电脑上的文件转移到另一台电脑
一台电脑上的文件移到另一台电脑上有很多种方法实现,其中最常用最简便的三种:U盘、移动硬盘等复制 用U盘、移动硬盘等移动介质,从一台电脑上复制出来,粘贴到另一台电脑上。通讯软件传输 用聊天软件、电子邮件等软件从一台电脑上传输文件到另一台上。局域网共享 前提是两台电脑在同一局域网内,并...

为什么家里的WIFI只有我一个人的显示不可上网,我的手机号连着宽带...
如果您使用的是华为手机,能连上wifi但是不能上网,可以通过以下方法进行排查处理:一、若使用的是家庭网络,建议连接其他wifi或手机个人热点进行测试排查:1.如果连接其他WiFi正常 (1)请不要远离路由器;(2)请检查宽带帐号是否到期,重启路由器并重启手机后尝试;(3)如果将路由器设置过黑白名单,则...

我要建立一个网站,需要哪几个步骤?
二、购买虚拟主机 虚拟主机和服务器可以用来装载网站程序,是网站建设必不可少的部分。对于新手来说选择虚拟主机比较好,虚拟主机我们常称为“空间”价格低廉,操作简单。三、选择网站程序 我们需要将网站程序上传到服务器上并运行以提供网站服务。新手可以根据自己的需求来选择合适的网站程序,较为普遍的有...

一个关于时空隧道的问题..
利用相对论在不考虑一些量子效应和除引力以外的任何能量的时候,我们得到了一些十分简单、基本的关于虫洞的描述。这些描述十分重要,但是由于我们研究的重要是黑洞,而不是宇宙中的洞,因此我在这里只简单介绍一下虫洞的性质,而对于一些相关的理论以及这些理论的描述,这里先不涉及。 虫洞有些什么性质呢?最主要的一个,是...

求一首歌 歌词我只知道几个字
我真的很想问 你是害羞还是太迟钝 默数123木头人 给我ㄧ秒心动的眼神 我很天真觉得勇敢的心花最动人 我期待着因为有你让爱情能完整 因为有你让爱情能完整 因为有你让爱情能完整landy:我已对你付出了所有 可是你却是一个木头 anita+zen:123木头人 怎麽狠心你就这样走 jacky+sbdw:123木头人 我...

为什么我的电脑打开浏览器只能进第一层菜单,后面的都进不去,郁闷,换了...
有时电信往往会让你禁用ApplicationManagement服务,就能解决了。这是由于某种不明病毒感染XP系统的应用层网关服务(ApplicationLayerGatewayService)导致XP系统用户打不开网页,在病毒感染之后,该服务会在每次系统启动时自动启动,并在后台产生一个alg.exe的进程,只要手动关闭该应用层网关服务,即可解决该问题...

求一份小艾的完整个人资料~~急
“如果你想完完全全地了解一个人,最好的方法不是和他做朋友,而是做他的敌人,和他战斗。” “我是...最喜欢的食物是烤宽面条 有一个女儿:迪奥拉;一个儿子:阿伦ii 05-06 赛季技术统计技术统计 球队 出场

我下载了一个深度xp sp3精简版v6.2到桌面上,是iso文件。接下来该怎么...
第一步:打开运行“简易虚拟光驱.EXE”,出现界面后,把ISO文件用鼠标复、拖到该软件界面上,确定。这时打开“我的电脑”,您就会发现多了一个光盘驱动器了。虚拟光驱已经生效。第二步:左健双击运行“寻找虚拟光驱上的gho文件然后安装.exe”,接下来是全自动的。程序将会把虚拟光驱上的gho文件拷到D盘...

岚山区18640228726: 怎么写好广搜(宽搜)啊?(pascal)
军音复方: 宽搜其实很简单,但难在不好监控,因为队列一般会很大.有几点值得注意.1)监控时队列开小一点,否则容易崩溃(特别FP).2)要判终止条件,一般为 until (open>=closed)或找到目标状态 .3)要注意尽量判重,否则队列会涨得很大. 这样你写个跳马问题(经典宽搜,不知道的话上网搜搜)的程序发给我.QQ(598416706),你注明时问问用户即可,我看看你的程序有没有什么值得改进或编程习惯有问题.

岚山区18640228726: PASCAL中的宽搜 -
军音复方: 懂队列吗?懂就好办了-队列初始化-while 队首指针-begin---从队列中取出一个元素---for i:=1 to 规则数 do if 符合规则且未出现过 then begin 扩展新节点; if 新节点是目标节点 then 输出并退出算法; 新节点入队列 end;-end;-if 队首指针>=队尾指针then 输出无解 end.基本就是这样了,没什么难的,好好学吧,我也刚会不久

岚山区18640228726: 简单深搜问题 c语言
军音复方: 你程序的错有三: 1、判断下界应该是x+d[i][0]>=0 && y+d[i][1]>=0. 2、循环体内,不能直接改变x,y的值,因为x,y为该层起点. 例如:x=0,y=0时.执行该层循环第一次后,x=1,y=0,递归回来后,起点就改变了. 3、b不应为全局变量,应该作...

岚山区18640228726: 一道简单的c语言程序设计题 帮兄弟问的 急急急急~~~!!!!!! -
军音复方: void input(int *p, int n) { int i; for(i = 0; i < n; i++) scanf("%d", p+i); return; }

岚山区18640228726: 广度优先搜索代码.也就是迷宫问题 -
军音复方: 这个bfs问题很容易掌握,是一种基础算法 首先记得添加队列容器 建立一个队列容器 之后 往里面压迷宫的起点 (通常是结构体) 之后在循环中加判断 判断当前取出的点是否能走,如果可以,压入它四周的四个点(视题目情况 不一定是四周) 再进行下一轮循环 循环体一般是while (!q.empty()) 循环一开始一般是 p=q.front(); //取出第一个元素 q.pop(); //删除第一个元素

岚山区18640228726: ACM一道简单广搜问题 -
军音复方: 超链接连不上,可能是我这边网络的问题,也有可能是你的网址是个内网地址.这个超链接问题不纠结了...根据你的中文描述,我大概了解题目意思.RE的原因是队列queue里面的元素太多,导致程序分配内存的时候出现问题.解决方法(个人建议而已),仅从程序设计角度.建一个标记数组,标记已经出现过的模n的值.举个例,x=1,n=101一开始变成2,2变成3、4,3变成4、6,4变成5、8.第3步的4、5、6、8,这里的4就重复了...建一个n大小的bool型数组,每搜出一个数,先检验这个模是否出现过.就像上例,3变4以后,检验出4在2的时候出现过,就应该忽略...

岚山区18640228726: 请问各位高手呀,怎样用C语言编写一个关于求二叉树总数的程序和一个关于广度优先搜索的算法? -
军音复方: DEV C++下编译成功1.二叉树总数?(节点总数?)#include#include#include typedef struct node { char data;//节点信息struct node *lchild;//左孩子struct node *rchild;//右孩子 }BTnode; static char a[1024]; static int n=0; void create(BTnode *&...

岚山区18640228726: 用C语言编写程序实现单链表的逆置算法,对空间使用不受限制. -
军音复方: //就地逆置单链表 //定义结点数据元素结构体 typedef struct snode { DataType x; struct snode *next; }SLNode; //逆置算法 void ListReverse(SLNode *head) { int i=-1,j; DataType x; SLNode *p,*q; p=head; while(p->next!=NULL&&inext; i++; q=head; j=-1; while(q->next!=NULL&&jnext; j++; } x=p->data; p->data=q->data; q->data=x; } } 我给你一个,看看怎麽样.

岚山区18640228726: 菜鸟求助:一道很简单的C编程题 -
军音复方: 这样是可以的,形式是输入一个数跟着输出绝对值 EOF指的是end of file.是一个特定的标记 #include <stdio.h> main() { float a; while(scanf("%f",&a)!=EOF) //这个语句的意思就是用a来接收输入的数 //并以Ctrl+z结束整个程序 { if (a<0) a=-a; ...

岚山区18640228726: 谁能帮忙做一个简单得图书检索系统啊? -
军音复方: 这个和在线购买书是一样的啊,数据库最好建两个表,一个是categoryinfo,里面两个字段,categoryid和name,id主键,可以自动增长,再一个表是bookinfo,里面有你想要的字段,bookid,bookname,作者,出版商,书号,价格,额外加一个categoryid作为外键,检索时用select * from bookinfo where categoryid=(select categoryid from categoryinfo where name="经济")

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网