| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1036 人关注过本帖
标题:迷宫问题求解,我写的程序有问题?
只看楼主 加入收藏
学C很多年
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-9-8
收藏
 问题点数:0 回复次数:8 
迷宫问题求解,我写的程序有问题?
本人C才入门 我写了这段程序 但是运行不了 高手请帮忙查查错误
功能是:输入任意大小迷宫,用非递归方法求出一条走出迷宫的路径 并将路径输出
#include"linkstack.cpp"
#include"iostream.h"
struct node
{
int row;
int col;
int dir;
};
void main()
{
const int move[8][2]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,1}};
int row=8,col=11,start=1,end=9,i,j,k;
{
cout<<"输入行数和列数:"
cin>>row>>col;
row+=2;col+=2;
cout<<"请一行一行输入迷宫:\n";
for(i=1;i<row-1;i++)
{
cout<<"row"<<i":\t";
for(j=1;j<col-1;j++)
cin>>maze[i][j];
}
cout<<"请输入开始的列号和结束的列号:";
cin>>start>>end;
for(i=0;i<row;i++)
maze[i][0]=maze[i][col-1]=1;
for(i=0;i<col;i++)
maze[0][i]=maze[row-1][i]=1;
}
cout<<"maze:\n";
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
cout<<maze[i][j]<<" ";cout<<"\n";
}
cout<<"\n";
linkstack<node>stack;
node mynode;
mynode.row=1;
mynode.col=start;
mynode.dir=2;
stack.push(mynode);
int g,h,find=0;
while(!stack.isempty()&&!find)
{
stack.pop(mynode);
i=mynode.row;j=mynode.col;k=mynode.dir;
while(k<8)
{
g=i+move[k][0];
h=j+move[k][1];
if(g==row-2&&h==end&&maze[g][h]==0)
{
find=1;
maze[g][h]=2;break;
}
if(maze[g][h]==0)
{
maze[g][h]=2;
mynode.row=g;mynode.col=h;mynode.dir=k;
stack.push(mynode);
i=g;
j=h;
k=0;continue;
}
k=k+1;
}
}
if(find)
{
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
cout<<maze[i][j]<<" ";
cout<<"\n"
}
}
else cout<<"no path!\n";
}
搜索更多相关主题的帖子: 迷宫 问题求解 
2006-09-08 18:42
编程疯子
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-9-8
收藏
得分:0 

大哥你这是C++吧?

2006-09-08 19:01
学C很多年
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-9-8
收藏
得分:0 

对啊,是C++啊 ,帮我看看吧 有一个ERROR,我不知道为什么

2006-09-09 10:41
HuiSky
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-5-13
收藏
得分:0 

/*用栈解迷宫*/
#include "Stdio.h"
#include "Conio.h"
#include "Stack.h"
#define N 10
typedef struct INFOR
{
int num;
int flag;
}info;
typedef struct MAZE
{
cod point;
int tag;
}maze;
maze search(info a[][N+2],int x,int y);
int main(void)
{
list_stack *s=NULL;
info arr[N+2][N+2];
FILE *fp;
int i,j;
cod cur;
InitialStack(s);
fp=fopen("MAZE.TXT","r");
if(fp==NULL)
exit(1);
for(i=0;i<N+2;i++)
for(j=0;j<N+2;arr[i][j].num=arr[i][j].flag=0,j++);
for(i=1;i<=N;i++)
for(j=1;j<=N;fscanf(fp,"%d",&arr[i][j].num),j++);
fclose(fp);
cur.x=cur.y=10;
arr[10][10].flag=1;
push(s,cur);
do
{
maze var;
var=search(arr,cur.x,cur.y);
if(var.tag)
{
cur=GetTop(s);
pop(s);
}
else
{
push(s,var.point);
cur=var.point;
}
}while(cur.x!=1||cur.y!=1);
s=s->link;
while(s->link->link)
{
printf("(%d,%d)->",s->xy.x,s->xy.y);
s=s->link;
}
printf("(%d,%d)",10,10);
getch();
return 0;
}
maze search(info a[][N+2],int x,int y)
{
maze var;
/*左*/
if(a[x][y-1].num==1&&a[x][y-1].flag==0)
{
a[x][y-1].flag=1;
var.point.x=x;
var.point.y=y-1;
var.tag=0;/*表示还可继续查询*/
return var;
}
/*左上*/
if(a[x-1][y-1].num==1&&a[x-1][y-1].flag==0)
{
a[x-1][y-1].flag=1;
var.point.x=x-1;
var.point.y=y-1;
var.tag=0;/*表示还可继续查询*/
return var;
}
/*上*/
if(a[x-1][y].num==1&&a[x-1][y].flag==0)
{
a[x-1][y].flag=1;
var.point.x=x-1;
var.point.y=y;
var.tag=0;/*表示还可继续查询*/
return var;
}
/*右上*/
if(a[x-1][y+1].num==1&&a[x-1][y+1].flag==0)
{
a[x-1][y+1].flag=1;
var.point.x=x-1;
var.point.y=y+1;
var.tag=0;/*表示还可继续查询*/
return var;
}
/*右*/
if(a[x][y+1].num==1&&a[x][y+1].flag==0)
{
a[x][y+1].flag=1;
var.point.x=x;
var.point.y=y+1;
var.tag=0;/*表示还可继续查询*/
return var;
}
/*右下*/
if(a[x+1][y+1].num==1&&a[x+1][y+1].flag==0)
{
a[x+1][y+1].flag=1;
var.point.x=x+1;
var.point.y=y+1;
var.tag=0;/*表示还可继续查询*/
return var;
}
/*下*/
if(a[x+1][y].num==1&&a[x+1][y].flag==0)
{
a[x+1][y].flag=1;
var.point.x=x+1;
var.point.y=y;
var.tag=0;/*表示还可继续查询*/
return var;
}
/*左下*/
if(a[x+1][y-1].num==1&&a[x+1][y-1].flag==0)
{
a[x+1][y-1].flag=1;
var.point.x=x+1;
var.point.y=y-1;
var.tag=0;/*表示还可继续查询*/
return var;
}
var.tag=1;
return var;
}
栈定义如下:"Stack.h"
#include "Stdio.h"
#include "Conio.h"
#include "stdlib.h"
typedef struct coordinate
{
int x;
int y;
}cod;
typedef struct STACK
{
cod xy;
struct STACK *link;
}list_stack;
void DoError(int error)
{
switch(error)
{
case 1:puts("Memory out!");break;
case 2:puts("Can't find a path!");break;
default:exit(1);
}
}
list_stack *InitialStack(list_stack *stack)
{
stack=(list_stack*)malloc(sizeof(list_stack));
if(stack==NULL)
DoError(1);
stack->link=NULL;
}
void push(list_stack *stack,cod data)
{
list_stack* node=(list_stack *)malloc(sizeof(list_stack));
if(node==NULL)
DoError(1);
node->xy=data;
node->link=stack->link;
stack->link=node;
}
cod GetTop(list_stack* stack)
{
if(stack->link)
return stack->link->xy;
else DoError(2);
}
void pop(list_stack* stack)
{
list_stack* node=stack->link;
if(node==NULL)
DoError(2);
stack->link=node->link;
free(node);
}


忘了把迷宫图打了,
1 0 0 0 1 1 0 1 1 0
0 1 1 0 0 0 0 1 1 1
1 1 0 1 1 1 1 1 1 0
1 1 0 1 0 0 1 1 1 1
0 0 1 1 0 1 1 0 1 0
0 1 1 1 1 0 0 1 1 1
0 0 1 1 0 1 1 0 1 1
1 1 0 0 0 1 1 0 1 0
0 0 1 1 1 1 1 0 0 1
0 1 0 0 1 1 1 1 0 1

[此贴子已经被作者于2006-9-9 10:51:05编辑过]


2006-09-09 10:50
学C很多年
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-9-8
收藏
得分:0 

楼上的朋友
你程序里STACK.H这个函数不能用 为什么

2006-09-09 10:52
HuiSky
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-5-13
收藏
得分:0 

不能用吗?
我能算出答案啊
答案如下:
(1,1)->(2,2)->(2,3)->(3,4)->(3,5)->(3,6)->(4,7)->(5,6)->(5,7)->(6,8)->(7,9)->(8,
9)->(9,10)->(10,10)


2006-09-09 10:55
学C很多年
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-9-8
收藏
得分:0 
pp13.cpp(3) : fatal error C1083: Cannot open include file: 'Stack.h': No such file or directory
执行 cl.exe 时出错.
2006-09-09 10:59
HuiSky
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-5-13
收藏
得分:0 
你把主程序下面的stack.h存到头文件中去了吗?

2006-09-09 11:00
学C很多年
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-9-8
收藏
得分:0 
要怎么存啊
2006-09-09 11:01
快速回复:迷宫问题求解,我写的程序有问题?
数据加载中...
 
   



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

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