YXTS122
2016-06-14 23:36
采纳率: 100%
浏览 1.0k
已采纳

为什么输出路径前面没显示出来?

 #include<iostream>
using namespace std;
#include<iomanip>
class Position//位置类(栈数据元素类)
{
public:
    int x;//存X坐标
    int y;//存Y坐标
};

class Stacknode//栈结点类
{
public:
    Position data;
    Stacknode *next;
};

class Stack//栈类
{
public:
Stacknode *top;//栈顶指针
    Stacknode *base;//栈底指针 
    unsigned height;//栈高
    Stack()//无参构造函数
    {
        top=NULL;
        height=0;
        base=NULL;
    }
   ~Stack()//析构函数
    {
        Clear();
    }
  void Clear()
    {
        Position po;
        Pop(po);
    }//清空当前栈中元素
    void Push(Position 
    &);//进栈函数
    void Pop(Position &);//出栈函数
};

void Stack::Push(Position &po)
{
    Stacknode *p;
    if(top)//若栈非空
    {
        p=new Stacknode;
        p->data=po;
        p->next=top;//将结点插入链式栈前端,成为栈顶元素
        top=p; //修改栈顶指针
    }
    else//若为空栈
    {
        top=new Stacknode; //为栈顶元素分配内存
        //将x赋给栈顶数据元素
        top->data=po;
        top->next=NULL;
    }
    height++;
}

 void Stack::Pop(Position &po)
{
    Stacknode *p;
    if(height)//若栈中有元素
        {
            po=top->data;
            cout<<"("<<po.x<<","<<po.y<<") ";
            p=top;//将栈顶指针赋给p
            top=top->next;//修改栈顶指针,下移一个位置
            delete p;//删除原栈顶结点
            height--;//栈高减1
        }
    else
         return;
}

class Maze
{
public:
    int m,n,maze[8][8];
    void Getnum()//获取迷宫的行数和列数
    {
        m=8;
        n=8;
    }
    void Getmaze();//构造和输入迷宫,为迷宫四周加上围栏
    void Simplemaze();//简化迷宫
    void Putmaze();//输出迷宫
    void compare(Stack &s,int i,int j);
};

void Maze::Getmaze()//构造和输入迷宫,为迷宫四周加上围栏
{
    int i,j;
        for (j=0;j<8;j++)
        {
            maze[0][j]=1;
        }
        for (j=0;j<8;j++)
        {
            maze[7][j]=1;
        }
        for (i=0;i<8;i++)
        {
            maze[i][0]=1;
        }
        for (i=0;i<8;i++)
        {
            maze[i][7]=1;
        }

cout<<"请输入迷宫的形状:"<<endl; 
for(i=1;i<7;i++)
        {
            for(j=1;j<7;j++)
            {
                cin>>maze[i][j];
            }
        }
}

void Maze::Simplemaze()//简化迷宫
{
        for (int t=1;t<7;t++)
        {
            for (int r=1;r<7;r++)
            {
                if (maze[t-1][r]+maze[t+1][r]>=3)
                   maze[t][r]=1;
            }
        }
       maze[1][1]=0;
   maze[6][7]=4;
}

void Maze::Putmaze()//输出迷宫
{
    for(int i=0;i<8;i++)
        {
            for(int j=0;j<8;j++)
            {
               cout<<setw(5)<<maze[i][j];
            }
            cout<<endl;
        }

}

void Maze::compare(Stack &s,int i,int j)
{
int p=0,q=0,d;
Position point;
if(maze[i][j]==4)
{
cout<<"恭喜,该迷宫可以走出!"<<"具体步骤如下"<<endl;
/*
while(s.base!=s.top)    //输出栈中的所有元素
{
    p=s.base->data.x;
    q=s.base->data.y;
    s.base++;
cout<<"("<<p<<","<<q<<")"<<"    ";
}
*/
s.Pop(point);
return ;
}
if(maze[i][j]==2||maze[i][j]==1)
{
    cout<<"迷宫不能走出\n";
    return;
}
if(maze[i][j]==0)
{
maze[i][j]=2;
system("cls");
Putmaze();
point.x=i;
point.y=j;
s.Push(point);
cout<<"请输入方向:1表示向右,2表示向下,3表示向左,4表示向上:";
cin>>d;
switch (d)
{
case 2:
    compare(s,i+1,j);  break;
case 1:
    compare(s,i,j+1);break;
case 4:
    compare(s,i-1,j);break;
case 3:
   compare(s,i,j-1);break;
}
return;
}
}



int  main()
{
    Stack s;

    Maze MAZE;
    int m,n;
    MAZE.Getnum();
    m=MAZE.m;
    n=MAZE.n;
    MAZE.Getmaze();
    MAZE.Simplemaze();
    MAZE.Putmaze();
    MAZE.compare(s,1,1);
    return 0;
}

图片说明
图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • YXTS122 2016-06-18 22:46
    已采纳
      #include<iostream>
    using namespace std;
    #include<iomanip>
    class Position//位置类(栈数据元素类)
    {
    public:
        int x;//存X坐标
        int y;//存Y坐标
    };
    
    class Stacknode//栈结点类
    {
    public:
        Position data;
        Stacknode *next;
    };
    
    class Stack//栈类
    {
    public:
    Stacknode *top;//栈顶指针
        Stacknode *base;//栈底指针 
        unsigned height;//栈高
        Stack()//无参构造函数
        {
            top=NULL;
            height=0;
            base=NULL;
        }
       ~Stack()//析构函数
        {
            Clear();
        }
      void Clear()
        {
            Position po;
            while(Pop(po));
        }//清空当前栈中元素
        void Push(Position 
        &);//进栈函数
        int Pop(Position &);//出栈函数
    };
    
    void Stack::Push(Position &po)
    {
        Stacknode *p;
        p=new Stacknode;
        p->data=po;
        p->next=NULL;
        if(top)//若栈非空
        {
           top->next=p;
            top=p; //修改栈顶指针
        }
        else//若为空栈
        {
            base=top=p;
        }
        height++;
    }
    
     int Stack::Pop(Position &po)
    {
        Stacknode *p;
        if(height)//若栈中有元素
        {
            po=base->data;
            cout<<"("<<po.x<<","<<po.y<<") ";
            p=base;
            base=base->next;//修改栈底指针,下移一个位置
            delete p;//删除原栈底结点
            height--;//栈高减1
            return 1;
        }
        else
             return 0;
    }
    
    class Maze
    {
    public:
        int m,n,maze[8][8];
        void Getnum()//获取迷宫的行数和列数
        {
            m=8;
            n=8;
        }
        void Getmaze();//构造和输入迷宫,为迷宫四周加上围栏
        void Simplemaze();//简化迷宫
        void Putmaze();//输出迷宫
        void compare(Stack &s,int i,int j);
    };
    
    void Maze::Getmaze()//构造和输入迷宫,为迷宫四周加上围栏
    {
        int i,j;
            for (j=0;j<8;j++)
            {
                maze[0][j]=1;
            }
            for (j=0;j<8;j++)
            {
                maze[7][j]=1;
            }
            for (i=0;i<8;i++)
            {
                maze[i][0]=1;
            }
            for (i=0;i<8;i++)
            {
                maze[i][7]=1;
            }
    
    cout<<"请输入迷宫的形状:"<<endl; 
    for(i=1;i<7;i++)
            {
                for(j=1;j<7;j++)
                {
                    cin>>maze[i][j];
                }
            }
    }
    
    void Maze::Simplemaze()//简化迷宫
    {
            for (int t=1;t<7;t++)
            {
                for (int r=1;r<7;r++)
                {
                    if (maze[t-1][r]+maze[t+1][r]>=3)
                       maze[t][r]=1;
                }
            }
           maze[1][1]=0;
       maze[6][7]=4;
    }
    
    void Maze::Putmaze()//输出迷宫
    {
        for(int i=0;i<8;i++)
            {
                for(int j=0;j<8;j++)
                {
                   cout<<setw(5)<<maze[i][j];
                }
                cout<<endl;
            }
    
    }
    
    void Maze::compare(Stack &s,int i,int j)
    {
    int p=0,q=0,d;
    Position point;
    if(maze[i][j]==4)
    {
    cout<<"恭喜,该迷宫可以走出!"<<"具体步骤如下"<<endl;
    /*
    while(s.base!=s.top)    //输出栈中的所有元素
    {
        p=s.base->data.x;
        q=s.base->data.y;
        s.base=s.base->next;
    cout<<"("<<p<<","<<q<<")"<<"    ";
    }
    */
    while(s.Pop(point));
    return ;
    }
    if(maze[i][j]==2||maze[i][j]==1)
    {
        cout<<"迷宫不能走出\n";
        return;
    }
    if(maze[i][j]==0)
    {
    maze[i][j]=2;
    system("cls");
    Putmaze();
    point.x=i;
    point.y=j;
    s.Push(point);
    cout<<"请输入方向:1表示向右,2表示向下,3表示向左,4表示向上:";
    cin>>d;
    switch (d)
    {
    case 2:
        compare(s,i+1,j);  break;
    case 1:
        compare(s,i,j+1);break;
    case 4:
        compare(s,i-1,j);break;
    case 3:
       compare(s,i,j-1);break;
    }
    return;
    }
    }
    
    
    
    int  main()
    {
        Stack s;
    
        Maze MAZE;
        int m,n;
        MAZE.Getnum();
        m=MAZE.m;
        n=MAZE.n;
        MAZE.Getmaze();
        MAZE.Simplemaze();
        MAZE.Putmaze();
        MAZE.compare(s,1,1);
        return 0;
    }
    
    点赞 评论
  • qq_35316972 2016-06-15 00:05

    你可能没有弄好这样东西的可能很大!

    点赞 评论

相关推荐 更多相似问题