主题:求助,程序中有一点错误,请赐教!
// 迷宫求解.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
using namespace std;
#define ok
#define error
#define true
#define false
#define stack_init_size 200
#define stackincrement 100
#define m 10
typedef struct {
int x;//路径上的横坐标
int y;//路径上的纵坐标
int d;//下一通道的方向
}selemtype;//元素类型
typedef struct{
selemtype *base;
selemtype *top;
int stacksize;
}Sqstack;
int initstack(Sqstack &S){
S.base=(selemtype*)malloc(stack_init_size*sizeof(selemtype));
if(!S.base) return 0;
S.top=S.base; //空栈
S.stacksize=stack_init_size;
return 1;
}
int stackempty(Sqstack S){
if(S.base==S.top)
return 1;
else
return 0;
}
int push(Sqstack &S,selemtype a){ //插入新元素E作为新的栈顶元素
if(S.top-S.base>S.stacksize) {//栈满
S.base=(selemtype*)realloc(S.base,(S.stacksize+stackincrement)*sizeof(selemtype));
if(!S.base) return 0;//分配失败
S.top=S.base+S.stacksize;
S.stacksize+=stackincrement;
}
*S.top++=a;
return 0;
}//压栈
int pop(Sqstack &S){//若栈不空,则删除栈顶元素,并用E返回其值
*S.top=*--S.top;
return 0;
}
selemtype top(Sqstack S)
{
return (*S.top);
}
void pushstack(Sqstack &S,int x,int y,int d){//把坐标和方向插入栈
selemtype e;
e.x=x;
e.y=y;
e.d=d;
push(S, e);
}
void footprint(Sqstack S)
{
selemtype e;
cout<<"the revers path is:";
while(!stackempty( S))
{
e=top(S);
pop(S);
cout<<e.x<<","<<e.y<<endl;
}
}
void mazepath(int maze[][m],int d[][2],int x0,int y0,int x1,int y1)//x0,y0为起点,x1,y1为终点
{
int i,j,a,b,k;
Sqstack S;
initstack(S);
selemtype e;
maze[x0][y0]=8;//第一步,并以8为标记
pushstack(S,x0,y0,-1);//把初始点压栈
do
{
e=top(S);
pop(S);
i=e.x;j=e.y;
for(k=(e.d+1);k<=3;k++)//每个点的各个方向进行选择
{
[color=800000]a=i+d[k][1];b=j+d[k][0];[/color];//[color=000080]错误所在[/color]
if(a==x1 && b==y1 && maze[a][b]==0)
{
footprint(S);//走到出口,打出路径
return ;
}
if(maze[a][b]==0)//没有经过此点
{
maze[a][b]=8;//做标记
pushstack(S,i,j,k);
i=a;j=b;k=-1;
}//if
}//for
}while(!stackempty(S));
cout<<"这样的路径不存在";
}
int main()
{
char w;
int d[][2]={0,1,1,0,-1,-1,0,0,1,1};
int maze[][10]={
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,
};
mazepath(maze,d,1,1,8,8);
getchar();
cin>>w;
return 0;
}
错误为红色字体部分,就是调试的时候出现了访问地址出错,说是访问发生了冲突.是怎么回事哟,而且现在写程序也经常碰到写的程序访问地址出错的情况,但是每次都不知所措.
//
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
using namespace std;
#define ok
#define error
#define true
#define false
#define stack_init_size 200
#define stackincrement 100
#define m 10
typedef struct {
int x;//路径上的横坐标
int y;//路径上的纵坐标
int d;//下一通道的方向
}selemtype;//元素类型
typedef struct{
selemtype *base;
selemtype *top;
int stacksize;
}Sqstack;
int initstack(Sqstack &S){
S.base=(selemtype*)malloc(stack_init_size*sizeof(selemtype));
if(!S.base) return 0;
S.top=S.base; //空栈
S.stacksize=stack_init_size;
return 1;
}
int stackempty(Sqstack S){
if(S.base==S.top)
return 1;
else
return 0;
}
int push(Sqstack &S,selemtype a){ //插入新元素E作为新的栈顶元素
if(S.top-S.base>S.stacksize) {//栈满
S.base=(selemtype*)realloc(S.base,(S.stacksize+stackincrement)*sizeof(selemtype));
if(!S.base) return 0;//分配失败
S.top=S.base+S.stacksize;
S.stacksize+=stackincrement;
}
*S.top++=a;
return 0;
}//压栈
int pop(Sqstack &S){//若栈不空,则删除栈顶元素,并用E返回其值
*S.top=*--S.top;
return 0;
}
selemtype top(Sqstack S)
{
return (*S.top);
}
void pushstack(Sqstack &S,int x,int y,int d){//把坐标和方向插入栈
selemtype e;
e.x=x;
e.y=y;
e.d=d;
push(S, e);
}
void footprint(Sqstack S)
{
selemtype e;
cout<<"the revers path is:";
while(!stackempty( S))
{
e=top(S);
pop(S);
cout<<e.x<<","<<e.y<<endl;
}
}
void mazepath(int maze[][m],int d[][2],int x0,int y0,int x1,int y1)//x0,y0为起点,x1,y1为终点
{
int i,j,a,b,k;
Sqstack S;
initstack(S);
selemtype e;
maze[x0][y0]=8;//第一步,并以8为标记
pushstack(S,x0,y0,-1);//把初始点压栈
do
{
e=top(S);
pop(S);
i=e.x;j=e.y;
for(k=(e.d+1);k<=3;k++)//每个点的各个方向进行选择
{
[color=800000]a=i+d[k][1];b=j+d[k][0];[/color];//[color=000080]错误所在[/color]
if(a==x1 && b==y1 && maze[a][b]==0)
{
footprint(S);//走到出口,打出路径
return ;
}
if(maze[a][b]==0)//没有经过此点
{
maze[a][b]=8;//做标记
pushstack(S,i,j,k);
i=a;j=b;k=-1;
}//if
}//for
}while(!stackempty(S));
cout<<"这样的路径不存在";
}
int main()
{
char w;
int d[][2]={0,1,1,0,-1,-1,0,0,1,1};
int maze[][10]={
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,
};
mazepath(maze,d,1,1,8,8);
getchar();
cin>>w;
return 0;
}
错误为红色字体部分,就是调试的时候出现了访问地址出错,说是访问发生了冲突.是怎么回事哟,而且现在写程序也经常碰到写的程序访问地址出错的情况,但是每次都不知所措.