我必须将STRING变量与CHAR计数器连接,但Pascal返回“arg no.1的不兼容类型:获得SHORTSTRING,预期CHAR”。我正在使用队列,这是代码:
program routes;
uses crt, queues;
type graph = array['A'..'E','A'..'E'] of integer;
const G : graph = ((0,1,0,0,0),
(0,0,1,1,1),
(0,0,0,1,1),
(1,0,1,0,0),
(0,0,1,0,0));
procedure bfs(x,y : char; var G : graph);
var f : queue;
r : string;
i : char;
begin
startq(q);
enqueue(x,q);
while not emptyq(q) do
begin
r := unqueue(q);
x := r[length(r)];
if x = y then
writeln(r)
else for i := 'A' to 'E' do
if(G[x,i] = 1) and (pos(i,r) = 0) then
enqueue(r + i,q);
end;
end;
begin
bfs('A','E',G);
readln;
end;
end.
第25行出现错误:入队(r + i,q);
提前致谢。
修改
“入队”的程序是:
procedure add(var n : integer);
begin
if n < max then
inc(n);
else n := 1;
end;
procedure enqueue(x : titem; var f : queue);
begin
if fullq(q) then err('Queue overload!');
q.item[q.last] := x;
add(q.last);
inc(q.total);
end;
修改
添加单位的界面:
unit queues;
interface
const max = 50;
type titem = char;
type queue = record
first, last, total : integer;
titem : array[1..max] of titem;
end;
答案 0 :(得分:0)
如上所述,没有enqueue的定义,这很难判断,但你的程序调用
enqueue(x,q);
一旦x是CHAR
类型以后
enqueue(r + i,q);
其中r + i是串联,因此是字符串类型。这意味着入队程序需要重载
你没有提到使用过的编译器,但如果是turbo pascal,这就是问题,因为turbo pascal不支持重载。