C语言数据结构背包问题,图问题,求解!!!

博客分类:
#include &stdio.h&
#include &stdlib.h&
#define MAXSIZE 20
#define ERROR -1
#define OK
#define FALSE 0
#define TRUE
typedef enum{RIGHT,DOWN,LEFT,UP}D
typedef enum{YES,NO}MarkT
typedef struct position
//迷宫中位置的坐标
typedef struct
//当前位置在路径中的序号
//当前位置在迷宫中的坐标
//从当前位置走到下一位置的方向
//栈元素的类型
typedef struct
SElemType *
char maze[MAXSIZE][MAXSIZE]={
{'1','1','1','1','1','1','1','1','1','1'},
{'1','0','0','1','0','0','0','1','0','1'},
{'1','0','0','1','0','0','0','1','0','1'},
{'1','0','0','0','0','1','1','0','0','1'},
{'1','0','1','1','1','0','0','0','0','1'},
{'1','0','0','0','1','0','0','0','0','1'},
{'1','0','1','0','0','0','1','0','0','1'},
{'1','0','1','1','1','0','1','1','0','1'},
{'1','1','0','0','0','0','0','0','0','1'},
{'1','1','1','1','1','1','1','1','1','1'}
//用二维字符数组表示迷宫
int InitStack(Stack *S)
//创建一个空栈
S-&elem=(SElemType*)malloc(MAXSIZE*MAXSIZE*sizeof(SElemType));
if(!S-&elem)
return ERROR;
return OK;
int Push(Stack *S,SElemType e)
//元素e入栈
if(S-&top&=MAXSIZE*MAXSIZE)
return ERROR;
S-&elem[S-&top++]=e;return OK;
int Pop(Stack *S,SElemType *e) //栈顶元素出栈,由e带回栈顶元素
if(S-&top&=0)
return ERROR;
*e=S-&elem[--S-&top];
return OK;
int Empty(Stack S)
//判断栈是否为空
if(S.top==0)
return TRUE;
return FALSE;
int createMaze(Position *startpos,Position *endpos)
{ Position start,
printf("请输入迷宫入口的位置:");
scanf("%d%d",&start.x,&start.y);
printf("请输入迷宫出口的位置:");
scanf("%d%d",&end.x,&end.y);
*startpos= *endpos=
return OK;
//createMaze
int canPass(Position curpos)
if(maze[curpos.x][curpos.y]=='0')
return TRUE;
return FALSE;
void markPos(Position curpos,MarkTag tag)
//为已经探索过的位置加标记
switch(tag)
case YES: maze[curpos.x][curpos.y]='.';
//路径标记
maze[curpos.x][curpos.y]='#';
//死胡同标记
//根据当前的位置坐标和下一步要探索的方向dir求下一步要走的位置坐标
Position nextPos(Position curpos,Direction dir)
switch(dir)
case RIGHT:nextpos.x=curpos.nextpos.y =curpos.y +1;
case DOWN :nextpos.x=curpos.x+1 ;nextpos.y =curpos.y;
case LEFT :nextpos.x=curpos.nextpos.y =curpos.y -1;
case UP :nextpos.x=curpos.x-1 ;nextpos.y =curpos.y;
Direction nextDir(Direction dir)
switch(dir)
case RIGHT: return DOWN;
case DOWN : return LEFT;
case LEFT: return UP;
int Solve(Stack *S,Position start,Position end)
{//若迷宫中存在从入口start到出口end的通道,则求得一条存放在栈S中,并返回TRUE,若迷宫中不存在从入口start到出口end的通道,并返回FALSE
int curstep=1;
//共用的步数
if(InitStack(S)==ERROR)
return FALSE;
if(canPass(curpos)){
//当前位置可以通过
markPos(curpos,YES);
//留下足迹
e.order=e.seat=e.di=RIGHT;
Push(S,e);
//当前位置加入路径
if(curpos.x==end.x&&curpos.y==end.y)
//当前位置是出口
return TRUE;
curpos=nextPos(curpos,RIGHT);
curstep++;
//当前位置不能通过
if(!Empty(*S)){
if(Pop(S,&e)==ERROR)
return FALSE;
while(e.di==UP&&!Empty(*S)){
//四个方向都试探过,没有找到通路也不能继续探索,则回溯
curpos=e.markPos(curpos,NO);
if(Pop(S,&e)==ERROR)
return FALSE;
if(e.di!=UP){
//四个方向还没有试探完
e.di=nextDir(e.di);
Push(S,e);
//换下一个方向探索
curpos=nextPos(e.seat,e.di);
}while(!Empty(*S));
return FALSE;
void main()
Position startPos,endP
if(createMaze(&startPos,&endPos)==ERROR)
Solve(&path,startPos,endPos);
while(!Empty(path)){
//输出出口到入口的路径
Pop(&path,&e);
printf("(%d,%d)",e.seat.x,e.seat.y);
//输出迷宫的图形
printf("\n");
for(i=0;i&10;i++)
{for(j=0;j&10;j++)
printf("%c ",maze[i][j]);
printf("\n");
本文来源:
浏览: 3326 次
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'《数据结构(C语言版)》复习重点_图文_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
《数据结构(C语言版)》复习重点
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩28页未读,
定制HR最喜欢的简历
你可能喜欢数据结构,c语言:图,求解该题_百度知道
数据结构,c语言:图,求解该题
我有更好的答案
这个题要用十字链表来解决。关于十字链表,请参考关于代码,请参考说实话,代码我没写过,只是恰好知道这道题该用什么方法。所以,如果看完还没懂,我也没办法了:)
采纳率:79%
这个是什么啊/
为您推荐:
其他类似问题
您可能关注的内容
数据结构的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。C语言数据结构,关于图的遍历的问题,求大神指导一下
[问题点数:200分,无满意结帖,结帖人Ruanspirit]
C语言数据结构,关于图的遍历的问题,求大神指导一下
[问题点数:200分,无满意结帖,结帖人Ruanspirit]
只显示楼主
取消只显示楼主
匿名用户不能发表回复!|>> 数据结构中迷宫问题的求解(使用栈并且C语言实现)
数据结构中迷宫问题的求解(使用栈并且C语言实现)
所属分类:
下载地址:
栈的应用.zip文件大小:186.83 kB
分享有礼! 》
请点击右侧的分享按钮,把本代码分享到各社交媒体。
通过您的分享链接访问Codeforge,每来2个新的IP,您将获得0.1 积分的奖励。
通过您的分享链接,每成功注册一个用户,该用户在Codeforge上所获得的每1个积分,您都将获得0.2 积分的分成奖励。
栈是限定仅在表头进行插入和删除操作的线性表。通常将递归算法转换成非递归算法时需要使用栈。本代码实现了栈的顺序存储结构,对迷宫问题的求解进行了具体实现,并且代码能正确编译及运行。
Sponsored links
源码文件列表
温馨提示: 点击源码文件名可预览文件内容哦 ^_^
ex3-2.obj5.07 kB 15:15
vc60.idb33.00 kB 15:15
vc60.pdb52.00 kB 15:15
栈的应用.exe152.06 kB 15:15
栈的应用.ilk161.41 kB 15:15
栈的应用.pch216.31 kB 15:11
栈的应用.pdb385.00 kB 15:15
2.04 kB 15:15
栈的应用.dsp4.21 kB 15:09
栈的应用.dsw524.00 B 14:32
栈的应用.ncb41.00 kB 15:17
栈的应用.opt52.50 kB 15:17
栈的应用.plg1.72 kB 15:15
(提交有效评论获得积分)
评论内容不能少于15个字,不要超出160个字。
评价成功,多谢!
下载栈的应用.zip
CodeForge积分(原CF币)全新升级,功能更强大,使用更便捷,不仅可以用来下载海量源代码马上还可兑换精美小礼品了
您的积分不足,优惠套餐快速获取 30 积分
10积分 / ¥100
30积分 / ¥200原价 ¥300 元
100积分 / ¥500原价 ¥1000 元
订单支付完成后,积分将自动加入到您的账号。以下是优惠期的人民币价格,优惠期过后将恢复美元价格。
支付宝支付宝付款
微信钱包微信付款
更多付款方式:、
您本次下载所消耗的积分将转交上传作者。
同一源码,30天内重复下载,只扣除一次积分。
鲁ICP备号-3 runtime:Elapsed:ms - init:0.1;find:20.3;t:82.0;tags:80.6;related:323.6;comment:1.1; 27.69
登录 CodeForge
还没有CodeForge账号?
Switch to the English version?
^_^"呃 ...
Sorry!这位大神很神秘,未开通博客呢,请浏览一下其他的吧

我要回帖

更多关于 数据结构与问题求解 的文章

 

随机推荐