首页 新闻 会员 周边

数据结构课程实践之马踏棋盘问题

0
悬赏园豆:50 [待解决问题]

写了个程序运行不了,求高手看看

  1 #include<iostream>
2 using namespace std;
3
4 #include "SqStack.h"
5
6 struct PosType //棋盘坐标类型
7 {
8 int x; //行值
9 int y; //列值
10 };
11
12 struct DataType //栈的元素类型
13 {
14 PosType seat; //棋子在棋盘中的“坐标位置”
15 int di; //从此点走向下一点的”方向“(0~7表示八个方向)
16 };
17
18 class Maze
19 {
20 public:
21 Maze();
22 ~Maze();
23 void MazePath(PosType);
24 void Print();
25 private:
26 PosType NextPos(PosType,int);
27 int **m_maze; //棋盘数组
28 int m_row; //棋盘的行数
29 int m_col; //棋盘的列数
30 };
31
32 //构造函数,棋盘大小为8*8,故其二维数组的大小为8*8;
33 Maze::Maze()
34 {
35 m_maze=new int * [8];
36 for(int i=0;i<8;i++)
37 m_maze[i]=new int [8];
38 for(i=0;i<8;i++)
39 for(int j;j<8;j++)
40 m_maze[i][j]=0;
41 }
42
43 //析构函数
44 Maze::~Maze()
45 {
46 for(int i=0;i<8;i++)
47 if(m_maze[i]!=NULL)
48 delete [] m_maze[i];
49 if(m_maze!=NULL)
50 delete[] m_maze;
51 }
52
53 //从入口求得一条踏遍棋盘的路径存放在栈中(从栈底到栈顶),
54 //并返回ture 。通过路径为足迹(以路径上的序号表示)
55 void Maze::MazePath(PosType start)
56 {
57 SqStack<DataType> path(70); //创建栈
58 PosType curpos;
59 DataType e;
60 curpos = start;
61 int curstep = 1; //当前足迹,初值为1
62 while(curstep<=64)
63 {
64 if(m_maze[curpos.x][curpos.y]==0 && (curpos.x>=0 && curpos.x<8) && (curpos.y>=0 && curpos.y<8)){//当前位置可以通过,即未曾走到过得点
65 m_maze[curpos.x][curpos.y]=curstep;//留下足迹,棋盘m_maze的curpos点变为序号curstep
66 e.seat.x = curpos.x;
67 e.seat.y = curpos.y;
68 e.di = 0;
69 path.Push(e); //入栈当前位置及方向
70 curstep++; //足迹加1
71 if(curstep==64)
72 break;
73 curpos = NextPos(curpos,e.di);
74 }
75 else {//当前位置不能通过
76 if(!path.Empty()){
77 e =path.Top();//退栈到前一位置
78 path.Pop();
79 curstep--;
80 while(e.di == 7 && !path.Empty()){//该位置已到最后一个方向
81 m_maze[e.seat.x][e.seat.y] = -1; //留下不能通过的标记(-1)
82 e = path.Top();
83 curstep--;
84 }
85 if(e.di<7){//没到最后一个方向
86 e.di++; //换下一个方向搜索
87 path.Push(e);
88 curstep++;
89 curpos = NextPos(e.seat,e.di);//设定当前位置是新方向上的相邻点
90 }
91 }
92 }
93 }
94 }
95
96 //输出棋盘
97 void Maze::Print()
98 {
99 int i,j;
100 for(i=0;i<8;i++){
101 for(j=0;j<8;j++)
102 cout<<""<<m_maze[i][j];
103 cout<<endl;
104 }
105 }
106
107 //根据当前点得位置c及移动方向d,返回下一位置,移动方向
108 PosType Maze::NextPos(PosType c,int d)
109 {
110 PosType direct[8]={(-2,1),(-1,2),(1,2),(2,1),(2,-1),(1,-2),(-1,-2),(-2,-1)};
111 c.x += direct[d].x;
112 c.y += direct[d].y;
113 return c;
114 }
115
116 int main()
117 {
118 Maze L;
119 PosType begin;
120 Maze maze();
121 cout<<"请输入起始位置(行数,列数):";
122 cin>>begin.x>>begin.y;
123 L.MazePath(begin);
124 cout<<"此马的行走路线如下:"<<endl;
125 L.Print(); //输出此路线
126
127 system("PAUSE");
128 return 0;
129 }
孤狼zz的主页 孤狼zz | 初学一级 | 园豆:150
提问于:2011-12-02 02:59
< >
分享
所有回答(2)
0

错误信息是什么?

碧落星痕 | 园豆:708 (小虾三级) | 2011-12-02 08:29

一运行还没输入数据就自动结束了

支持(0) 反对(0) 孤狼zz | 园豆:150 (初学一级) | 2011-12-03 11:37
0

问题好多:

1.38行的for循环,应该定义int i的,这个应该编译不过去的。

2.39行的for循环,j没有赋初值,你说的运行就出错应该是因为这个吧。

3."SqStack.h"我看不到,但是既然是要用栈,干嘛不用标准库的<stack>呢。

4.cout<<"请输入起始位置(行数,列数):";cin>>begin.x>>begin.y;

这样输入0,0是必然错误的,程序会吧"0,0"转成int赋给begin.x的,应该分别输入行数和列数。

花无形 | 园豆:279 (菜鸟二级) | 2012-10-23 11:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册