数据结构课程设计编译通过不能运行

ruanxuewu0120 2009-08-27 03:01:26
#include"stdio.h"

#include"stdlib.h"

#define TRUE 1

#define FALSE 0

#define NULL 0

typedef struct

{

int i; // 当前棋盘的坐标位置

int j;

int level; // 当前试探的方向,下次将不再试探这个方向了

}SDataType;


typedef struct SNodeType

{

SDataType data;

SNodeType *next;

}SStack;

void InitStack(SStack *st);

int push(SStack *st,SDataType x);//压入元素

SNodeType *ptop(SStack *st);//取栈顶元素并弹出删除

int empty(SStack *st);//判断栈是否空

void print_map();

int map[8][8];

void main(){

SStack *head;//堆栈

SDataType *datap;

int count=0;

int i,j;

int m,n;

int level;

for(int k=0;k<8;k++) //棋盘初始化

for(int l=0;l<8;l++)

//*(*(map+k)+l)=0;

map[k][l]=0;

datap=(SDataType *)malloc(sizeof(SDataType)); //准备初始数据开始入栈,进入递归

datap->i=i=0;

datap->j=j=0;

datap->level=level=0;

InitStack(head);

push(head,*datap);

into: //递归入口

datap->i=i; //保存当前状态

datap->j=j;

switch(level){//选择递归入口

case 1:goto lev2;

case 2:goto lev3;

case 3:goto lev4;

case 4:goto lev5;

case 5:goto lev6;

case 6:goto lev7;

case 7:goto lev8;

case 8:goto exit;
};
lev1://递归入口1

m=i+1;n=j-2; //位置前进,但不覆当前位置

if(m>=0&&m<8&&n>=0&&n<8)//判断前进后的位置是否再棋盘里

if(map[m][n]==0){ //如果这个位置在棋盘里,判断是否位置为空

count++; //位置为空了,计数器加

map[i][j]=count; //棋盘置当前步数

datap->level=1; //设置当前入口号

push(head,*datap); //数据压入堆栈

i=m; //位置下移

j=n;

level=0; //上面的步奏已经完成了递归到下一层的准备工作

goto into; //进入到下一层

};

lev2:

m=i+2;n=j-1; // 2

if(m>=0&&m<8&&n>=0&&n<8)

if(map[m][n]==0){

count++; //计数器

map[i][j]=count; //棋盘置当前步数

datap->level=2;

push(head,*datap);

i=m; //位置下移

j=n;

level=0;

goto into;

};
lev3:

m=i+2;n=j+1; // 3

if(m>=0&&m<8&&n>=0&&n<8)

if(map[m][n]==0){

count++; //计数器

map[i][j]=count; //棋盘置当前步数

datap->level=3;

push(head,*datap);

i=m; //位置下移

j=n;

level=0;

goto into;

};
lev4:

m=i+1;n=j+2; // 4

if(m>=0&&m<8&&n>=0&&n<8)

if(map[m][n]==0){

count++; //计数器

map[i][j]=count; //棋盘置当前步数

datap->level=4;

push(head,*datap);

i=m; //位置下移

j=n;

level=0;

goto into;

};
lev5:

m=i-1;n=j+2; // 5

if(m>=0&&m<8&&n>=0&&n<8)

if(map[m][n]==0){

count++; //计数器

map[i][j]=count; //棋盘置当前步数

datap->level=5;

push(head,*datap);

i=m; //位置下移

j=n;

level=0;

goto into;

};
lev6:

m=i-2;n=j+1; // 6

if(m>=0&&m<8&&n>=0&&n<8)

if(map[m][n]==0){

count++; //计数器

map[i][j]=count; //棋盘置当前步数

datap->level=6;

push(head,*datap);

i=m; //位置下移

j=n;

level=0;

goto into;

};
lev7:

m=i-2;n=j-1; // 7

if(m>=0&&m<8&&n>=0&&n<8)

if(map[m][n]==0){

count++; //计数器

map[i][j]=count; //棋盘置当前步数

datap->level=7;

push(head,*datap);

i=m; //位置下移

j=n;

level=0;

goto into;

};
lev8:

m=i-1;n=j-2; // 8

if(m>=0&&m<8&&n>=0&&n<8)

if(map[m][n]==0){

count++; //计数器

map[i][j]=count; //棋盘置当前步数

datap->level=8;

push(head,*datap);

i=m; //位置下移

j=n;

level=0;

goto into;

};
exit://回退过程

if(!empty(head)){//判断是否堆栈为空了,为空说明递归过程结束

if(count==63){//用于判断是否已经求出一种解法

//countnum=countnum+1;

map[i][j]=64;

print_map(); //如果遍厉棋盘则打印一次走法

//map[i][j]=0;

};

count--; // 计数器减

map[i][j]=0;// 回退 置零

*datap=ptop(head)->data;//从堆栈里恢复数据

i=datap->i;

j=datap->j;

level=datap->level;//恢复上一个试探过的方向

goto into;

};

getchar();
}
void print_map(){//打印输出整个走法

for(int i=0;i<8;i++){

for(int j=0;j<8;j++)

printf("%3d",*(*(map+i)+j));

printf("\n");

}

}

void InitStack(SStack *st)
{

st=NULL;

}

int push(SStack *st,SDataType x)
{
SStack *p;

p=(SStack *)malloc(sizeof(SNodeType));

p->data=x;

p->next=st;

st=p;

return TRUE;
}

SNodeType *ptop(SStack *st)
{
SNodeType *p;

if(st==NULL) printf("The Stack Is NULL!\n");

p=st;

st=st->next;

return p;
}
int empty(SStack *st)
{

if(st==NULL) return TRUE;

else
return FALSE;
}
编译是通过了,但是运行的时候出现“XXX.exe应用程序错误”
各位大虾高手可否指点迷津,在此先谢过了。
...全文
104 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenhuahetao 2009-09-15
  • 打赏
  • 举报
回复
能描述一下你的算法吗
我可以帮你
zhangjunying1987 2009-09-01
  • 打赏
  • 举报
回复
最近我们也在搞课程设计 真麻烦
ruanxuewu0120 2009-08-28
  • 打赏
  • 举报
回复
虽然不是题目要求,但是我也想不到其他的办法啦
PeacefulBY 2009-08-27
  • 打赏
  • 举报
回复
VC断点调适:http://www.vckbase.com/document/viewdoc/?id=924
另外,如果不是题目要求,就不要用goto了吧……
ruanxuewu0120 2009-08-27
  • 打赏
  • 举报
回复
不好意思可以问下怎么设你所说的断点么?我不怎么会用VC
everysports 2009-08-27
  • 打赏
  • 举报
回复
你用VC,设个断点跟进去很容易找到错误所在~~
everysports 2009-08-27
  • 打赏
  • 举报
回复
调试一下呀?
ruanxuewu0120 2009-08-27
  • 打赏
  • 举报
回复
由于时间紧迫,鄙人不才,这个还是改编自上一个高手写的程序,但是好像改编不成功。郁闷--无奈

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧