今天上人工智能,老师让用c语言写一个用深度优先搜索算法查找钥匙的程序。
题目就是说:
写出机器人找钥匙程序,并思考,如果要使此机器人程序真正实用,还必须解决哪些技术问题?
![](https://i-blog.csdnimg.cn/blog_migrate/6b2c59deaabdfb67674c03d488761748.png)
/*find the keys using depth first深度优先搜索算法查找钥匙*/
#include "stdio.h"
#include "string.h"
#define MAX 100
/*存储查找钥匙路径的数据库*/
struct KEY{
char from[20];
char to[20];
char skip;
};
struct KEY keys[MAX]; /*存储上述结构的数据库*/
int f_pos=0; /*房子里面的房间数变量*/
int find_pos=0; /*为查找路径建立一个索引记录*/
int tos=0; /*堆栈的栈顶*/
struct stack{
char from[20];
char to[20];
};
struct stack bt_stack[MAX]; /*存放查找路径的结果*/
char from[20];
char to[20];
};
struct stack bt_stack[MAX]; /*存放查找路径的结果*/
assert_keys(from,to)
char *from,*to;
{
if(f_pos<MAX){
strcpy(keys[f_pos].from,from);
strcpy(keys[f_pos].to,to);
keys[f_pos].skip=0; /*做个标记,表示未做过搜索*/
f_pos++;
}
else printf("对不起,数据库中已经存满!!!\n");
}
char *from,*to;
{
if(f_pos<MAX){
strcpy(keys[f_pos].from,from);
strcpy(keys[f_pos].to,to);
keys[f_pos].skip=0; /*做个标记,表示未做过搜索*/
f_pos++;
}
else printf("对不起,数据库中已经存满!!!\n");
}
setup()
{
assert_keys("front_door","lr");
assert_keys("lr","bath");
assert_keys("lr","hall");
assert_keys("hall","bd1");
assert_keys("hall","bd2");
assert_keys("hall","mb");
assert_keys("lr","kitchen");
assert_keys("ketchen","keys");
}
{
assert_keys("front_door","lr");
assert_keys("lr","bath");
assert_keys("lr","hall");
assert_keys("hall","bd1");
assert_keys("hall","bd2");
assert_keys("hall","mb");
assert_keys("lr","kitchen");
assert_keys("ketchen","keys");
}
/*入栈*/
push(from,to)
char *from,*to;
{
if(tos<MAX){
strcpy(bt_stack[tos].from,from);
strcpy(bt_stack[tos].to,to);
tos++;
}
else printf("Stack full.\n");
}
push(from,to)
char *from,*to;
{
if(tos<MAX){
strcpy(bt_stack[tos].from,from);
strcpy(bt_stack[tos].to,to);
tos++;
}
else printf("Stack full.\n");
}
/*出栈*/
pop(from,to)
char *from,*to;
{
if(tos>0){
tos--;
strcpy(from,bt_stack[tos].from);
strcpy(to,bt_stack[tos].to);
}
else printf("Stack underflow.\n");
}
pop(from,to)
char *from,*to;
{
if(tos>0){
tos--;
strcpy(from,bt_stack[tos].from);
strcpy(to,bt_stack[tos].to);
}
else printf("Stack underflow.\n");
}
/*用深度优先搜索算法实现查找钥匙,返回所有能找到的路径和距离*/
route()
{
int t;
t=0;
while(t<tos){
printf("%s",bt_stack[t].from);
t++;
if(t<tos) printf("to");
}
printf("\n");
}
match(from,to)
char *from,*to;
{
register int t;
for(t=f_pos-1;t>-1;t--)
if(!strcmp(keys[t].from,from)&& !strcmp(keys[t].to,to))
return 1;
return 0;
}
route()
{
int t;
t=0;
while(t<tos){
printf("%s",bt_stack[t].from);
t++;
if(t<tos) printf("to");
}
printf("\n");
}
match(from,to)
char *from,*to;
{
register int t;
for(t=f_pos-1;t>-1;t--)
if(!strcmp(keys[t].from,from)&& !strcmp(keys[t].to,to))
return 1;
return 0;
}
/*给出起点,查找能到达的路径*/
find(from,anywhere)
char *from,*anywhere;
{
find_pos=0;
while(find_pos<f_pos){
if(!strcmp(keys[find_pos].from,from)&& !keys[find_pos].skip){
strcpy(anywhere,keys[find_pos].to);
keys[find_pos].skip=1;
return 1;
}
find_pos++;
}
return 0;
}
find(from,anywhere)
char *from,*anywhere;
{
find_pos=0;
while(find_pos<f_pos){
if(!strcmp(keys[find_pos].from,from)&& !keys[find_pos].skip){
strcpy(anywhere,keys[find_pos].to);
keys[find_pos].skip=1;
return 1;
}
find_pos++;
}
return 0;
}
/*判断能否找到钥匙*/
iskeys(from,to)
char *from,*to;
{
char anywhere[20];
if(match(from,to)){
push(from,to); /*返回距离*/
return;
}
if(find(from,anywhere)){
push(from,to);
iskeys(anywhere,to);
}
else if(tos>0){
pop(from,to);
iskeys(from,to);
}
}
iskeys(from,to)
char *from,*to;
{
char anywhere[20];
if(match(from,to)){
push(from,to); /*返回距离*/
return;
}
if(find(from,anywhere)){
push(from,to);
iskeys(anywhere,to);
}
else if(tos>0){
pop(from,to);
iskeys(from,to);
}
}
main()
{
char from[20],to[20];
setup();
iskeys("front_door","keys");
route(to);
getch();
}
问题是:无论用什么样的环境,编译没有错误,问题就是没有输出结果,不晓得为什么?可是我已经在route()中做了输出了,请问这是什么问题?
转载于:https://blog.51cto.com/lingchuan/314517