[c语言程序设计实验报告]五、 课程设计小结心得体会 1设计思想 1)、设定一个一维数组,可先按员工序号设定每位员工的工资 2)、利用While语句和Prinft语句完成用户菜单的设计 功能为:第1项 设为员工编号...+阅读
麻烦高手看一下这个C程序利用栈实现迷宫问题
只发有改动的函数void path(void){ /*output a path through the maze if such a path exists*/ int i, row, col, next_row, next_col, dir, top, found = 0; element position; mark[1][1] = 1; top = 0; stack[0].row = 1; stack[0].col = 1; stack[0].dir = 1; while(top >-1 & !62616964757a686964616fe58685e5aeb931333332633030found) { row = stack[top].row; col = stack[top].col; dir = stack[top].dir; while(dir
请帮我做一道数据结构程序题题目为用栈解决迷宫问题
注:下面分别是三个文件:栈的定义与声明(头文件)、栈的实现、迷宫问题。/* 顺序栈表示:类型和界面函数声明 */ enum { MAXNUM = 20 /* 栈中最大元素个数,应根据需要定义 */ }; typedef int DataType; /* 栈中元素类型,应根据需要定义 */ struct SeqStack { /* 顺序栈类型定义 */ int t; /* 栈顶位置指示 */ DataType s[MAXNUM]; }; typedef struct SeqStack SeqSack, *PSeqStack; /* 顺序栈类型和指针类型 */ /*创建一个空栈;为栈结构申请空间,并将栈顶变量赋值为-1*/ PSeqStack createEmptyStack_seq( void );/*判断pastack所指的栈是否为空栈,当pastack所指的栈为空栈时,则返回1,否则返回0*/ int isEmptyStack_seq( PSeqStack pastack );/* 在栈中压入一元素x */ void push_seq( PSeqStack pastack, DataType x );/* 删除栈顶元素 */ void pop_seq( PSeqStack pastack );/* 当pastack所指的栈不为空栈时,求栈顶元素的值 */ DataType top_seq( PSeqStack pastack );/* 顺序栈表示:函数定义 */#include#include#include "sstack.h"/*创建一个空栈;为栈结构申请空间,并将栈顶变量赋值为-1*/ PSeqStack createEmptyStack_seq( void ) { PSeqStack pastack = (PSeqStack)malloc(sizeof(struct SeqStack)); if (pastack==NULL) printf("Out of space!! \n"); else pastack->t = -1; return pastack; }/*判断pastack所指的栈是否为空栈,当pastack所指的栈为空栈时,则返回1,否则返回0*/ int isEmptyStack_seq( PSeqStack pastack ) { return pastack->t == -1; }/* 在栈中压入一元素x */ void push_seq( PSeqStack pastack, DataType x ) { if( pastack->t >= MAXNUM - 1 ) printf( "Stack Overflow! \n" ); else { pastack->t++; pastack->s[pastack->t] = x; } }/* 删除栈顶元素 */ void pop_seq( PSeqStack pastack ) { if (pastack->t == -1 ) printf( "Underflow!\n" ); else pastack->t--; }/* 当pastack所指的栈不为空栈时,求栈顶元素的值 */ DataType top_seq( PSeqStack pastack ) { return pastack->s[pastack->t]; }/* 迷宫问题的非递归算法(栈实现)*/#define MAXNUM 100/* 栈中最大元素个数 */#define N 11 /*地图的第一维长度*/#include#includetypedef struct { int x;/* 行下标 */ int y;/* 列下标 */ int d;/* 运动方向 */ } DataType; struct SeqStack { /* 顺序栈类型定义 */ int t; /* 指示栈顶位置 */ DataType s[MAXNUM]; }; typedef struct SeqStack *PSeqStack; /* 顺序栈类型的指针类型 */ PSeqStack pastack; /* pastack是指向顺序栈的一个指针变量 */ PSeqStack createEmptyStack_seq( void ) { PSeqStack pastack; pastack = (PSeqStack)malloc(sizeof(struct SeqStack)); if (pastack == NULL) printf("Out of space!! \n"); else pastack->t = -1; return pastack; } int isEmptyStack_seq( PSeqStack pastack ) { return pastack->t == -1; }/* 在栈中压入一元素x */ void push_seq( PSeqStack pastack, DataType x ) { if( pastack->t >= MAXNUM - 1 ) printf( "Overflow! \n" ); else { pastack->t++; pastack->s[pastack->t] = x; } }/* 删除栈顶元素 */ void pop_seq( PSeqStack pastack ) { if (pastack->t == -1 ) printf( "Underflow!\n" ); else pastack->t--; }/* 当pastack所指的栈不为空栈时,求栈顶元素的值 */ DataType top_seq( PSeqStack pastack ) { return (pastack->s[pastack->t]); } void pushtostack(PSeqStack st, int x, int y, int d) { DataType element; element.x = x; element.y = y; element.d = d; push_seq(st, element); } void printpath(PSeqStack st) { DataType element; printf("The revers path is:\n"); /* 打印路径上的每一点 */ while(!isEmptyStack_seq(st)) { element = top_seq(st); pop_seq(st); printf("the node is: %d %d \n", element.x, element.y); } }/* 迷宫maze[M][N]中求从入口maze[x1][y1]到出口maze[x2][y2]的一条路径 *//* 其中 1
用栈做的迷宫问题要代码急急急
1. 设计栈的抽象数据类型定义: ADT Stack{ 数据对象:D={ai|ai∈CharSet,i=1,2..,n} 数据关系:R1={|ai-1,ai∈D,i=2,...,n} 基本操作:(这里仅列举本题中使用的操作) Creat() 操作结果:构建一个空栈。 Push() 操作结果:在栈顶插入新的元素。 Pop() 操作结果:将栈顶元素弹出。 Empty() 判断栈是否为空 }ADT stack 2. 本程序包含了三个模块 1) 主程序模块: void main() { 输入起点,终点; 处理命令; 输出结果; } 2) 栈模块-----实现栈抽象数据类型 3) 迷宫模块-----找出迷宫中的通路 3.求解迷宫中一条通路的伪码 设定当前位置的初值为入口位置: do{ 若当前位置可通, 则{ 将当前位置插入栈顶; //纳入路径 若该位置是出口,则输出迷宫图,结束; //求得路径存放在栈中 否则切换当前位置的东邻方块为新的当前位置; } 否则{ 若栈不空且栈顶位置尚有其他方向未被探索, 则设定新的当前位置为沿顺时针方向旋转找到的栈顶位置的下一相邻块; 若栈不空但栈顶位置四周均不可通, 则{删去栈顶位置; //后退一步,从路径中删去该通道 若栈不空,则重新测试新的栈顶位置, 直至找到一个可通的相邻块或出栈至栈空; } } }while(栈不空) (栈空说明没有路径存在) 二. 详细设计 迷宫坐标位置类型 typedef struct maze{ int a; int b; int dir; struct maze *next; }mazestack; 栈的基本操作实现 1) 栈的初始化 mazestack *creat(){ mazestack * p; p=(mazestack *)malloc(sizeof(mazestack)); //开辟坐标空间 if(!p) return NULL; //开辟失败,返回空值 p->next=NULL; return p; //返回栈顶指针 } 2) 压栈操作 mazestack * push(mazestack * p,int i,int j,int k) //p为栈顶指针 i , j为坐标参数,k为通路下一步方向代码 { mazestack * p1; p1=(mazestack *)malloc(sizeof(mazestack)); //开辟坐标空间 if(!p1) return NULL; p1->a=i; p1->b=j; p1->dir=k; //将参数导入坐标空间 p1->next=p; //将新开辟空间压入栈 p=p1; //移动栈顶指针到新栈顶 return p; //返回栈顶指针 } 3) 弹栈操作 mazestack * pop(mazestack *p, int *i,int *j,int *k) // p为栈顶指针,i,j为坐标参数,k为通路下一步方向代码 { mazestack *p1; p1=p; *i=p1->a; *j=p1->b; *k=p1->dir; //将空间中坐标和方向代码导出 p=p->next; //将栈顶指针移动到新栈顶位置 free(p1); //释放旧栈顶空间 return p; } 4) 判断栈空 int empty(mazestack *p) //p为所要判断的指针 { if(p->next==NULL){ return 1; //栈空,返回1 } else return 0; /栈不空,返回0 } 改变路径前进方向 int nextpos(int *i,int *j,int di) //i,j为迷宫坐标,di为下一步路径的方向 { switch(di){ case 1: *i=*i;*j=*j+1;break; //di=1 ,下一步向东 case 2: *i=*i+1;*j=*j;break; //di=2 ,下一步向南 case 3: *i=*i;*j=*j-1;break; //di=3 , 下一步向西 case 4: *i=*i-1;*j=*j;break; //di=4 , 下一步向北 } return 1; } 求迷宫路径的算法 mazestack * maze(int i1,int j1,int i2,int j2) //i1,j1为入口坐标,i2,j2为出口坐标 { int a[10][10]={ 0,0,0,0,0,0,0,0,0,0, 0,1,1,0,1,1,1,0,1,0, 0,1,1,0,1,1,1,0,1,0, 0,1,1,1,1,0,0,1,1,0, 0,1,0,0,0,1,1,1,1,0, 0,1,1,1,0,1,1,1,1,0, 0,1,0,1,1,1,0,1,1,0, 0,1,0,0,0,1,0,0,1,0, 0,0,1,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,0,0,0}; //具体迷宫形式 int i=i1,j=j1; int k; mazestack * p; p=creat(); //建立栈 do{ if(a[i][j]==1){ //判断路径是否已经经过 a[i][j]=5; //没有经过,则将该坐标进行标记 p=push(p,i,j,a[i][j]); //将该坐标点压入栈中 if(i==i2&j==j2){ //判断压入坐标是否为终点 for(i=0;i
延伸阅读:
有人说在社会学的是实践你是怎么看这个问题社会学是从社会整体感念出发,通过社会关系和社会行为来研究社会的结构、功能、发生、发展规律的综合性学科。 中国社会学界对社会学的定义,大体有以下几种看法。 1、侧重以作...
自习课玩手机看篮球杂志检讨书1500字各位高手帮忙写一下啊什么叫检讨!检讨的浅层意思就是给自己的领导承认自己所犯的错误!而我写的检讨虽然是承认出自己的错误!可是我们不能因为一个检讨而改变自己!所以!下面是检讨的几大要素!请已经犯错...
c语言程序实验报告晕报告也要人教啊,我教你写 一、程序主要功能∶ 某校规定,学习成绩超过全班平均成绩的%10者得第一等奖,学习成绩超过全班平均成绩的%5者得第二等奖,某班有30名学生,请编写一个c语...
求大神帮忙做一下这个大学VB程序设计的实验报告Private Sub Command1_Click() Dim a As Integer, b As String, i As Integer, c() As String a = Len(Text1.Text) Print a ReDim c(a) As String For i = 1 To a b = Mid(...
麻烦明白人进来看一下我的条件如何申请日本永驻签证你好! 你这种情况既无法申请“家族滞在”,也无法申请“永住”。 申请家族滞在有两个条件: 1,抚养人的在留资格 抚养人必须是持有下述在留资格的外国人。 「教授」,「芸术」,「宗教...
c语言程序设计报告我这里有个类似的你自己再去改改#include#define N 50 #include#define USER "admin"#define PASSWORD "12345678"#include#define MAX 10 int NUM; int x; //全局变量 struct st...
C语言程序设计#include<stdio.h>#include<stdlib.h>#include<string.h> int s; struct NODE{ char num[20]; char name[20]; int chinese; int english; int math; int totle;}a[100]; vo...
求大神帮忙做一下这个大学VB程序设计的实验报告!Private Sub Command1_Click() Dim a As Integer, b As String, i As Integer, c() As String a = Len(Text1.Text) Print a ReDim c(a) As String For i = 1 To a b = Mid(...
c语言程序设计上机实验#includeusing namespace std; int main(){ int day; int timeOfMon[] = {31,29,31,30,31,30,31,31,30,31,30,31}; printf("2012年日历 ==========\n"); int sumOfMon[13]; su...