标题:[求助]数据结构车厢调度问题
只看楼主
小220
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-30
 问题点数:0 回复次数:21 
[求助]数据结构车厢调度问题

问题描述:
    假设停在铁路调度站入口处的车厢序列的编号依次为1,2,3,...n。设计一个程序,求 出所有可能由此输出的长度为n的车厢序列
基本要求:
用栈的顺序存储结构实现基本操作。
该问题要用递归的思想。
我做了程序但不懂 望高手指点迷津
大家可以提出自己的想法 ,互相交流
#include<iostream.h>
#include<assert.h>

class stack
{
private:
int * element;
int maxsize;
int top;
public:
void friend search(stack &s1,stack &s2,stack &s3);
stack(int n)
{ element=new int [n];
maxsize=n;
assert(element!=NULL);
top=-1;
}
void stack::push(int n)
{
assert(!isfull());
top++;
element[top]=n;
}
int stack::pop()
{
assert(!isempty());
int a=element[top];
top--;
return a;
}
bool isfull()
{
if(top==maxsize-1)
return 1;
else
return 0;
}
bool isempty()
{
if(top==-1)
return 1;
else
return 0;
}
void stack::print()
{
for(int i=0;i<top+1;i++)
cout<<element[i];
cout<<endl;
}
};
void search(stack &s1,stack &s2,stack &s3)
{
if(!s1.isempty())
{
s2.push(s1.pop());
search(s1,s2,s3);
s1.push(s2.pop());
}

if(!s2.isempty())
{
s3.push(s2.pop());
search(s1,s2,s3);
s2.push(s3.pop());
}
if( s3.isfull())
{
s3.print();
}
}
void main()
{
cout<<"请输车厢长度n: ";
int n; cin>>n;
stack s1(n);
for(int i=n;i>=1;i--)
s1.push(i);
stack s2(n),s3(n);
cout<<"输出序列为:"<<endl;
search(s1,s2,s3);
}

[此贴子已经被作者于2006-5-30 18:22:57编辑过]

搜索更多相关主题的帖子: 数据结构 车厢 stack int 
2006-05-30 12:49
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
得分:0 
小220,
你最好将问题详尽的叙述一下,否则局外人是很难知道你的意思的。

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2006-05-30 16:08
小220
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-30
得分:0 
问题已经叙述拉,请大家踊跃思考阿!!!
2006-05-30 18:29
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
得分:0 

你不懂哪说就好了,大家会尽力的
我也很晕
互相交流先给我们目标呀
问题已经叙述拉,请大家踊跃思考阿!!!
思考??????


嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-05-30 20:39
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 

他是不懂思路


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-30 20:47
小220
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-30
得分:0 

我不懂的就是search这个函数。加//的地方该怎么理解阿、
void search(stack &s1,stack &s2,stack &s3)
{
if(!s1.isempty())
{
s2.push(s1.pop());//
search(s1,s2,s3);//
s1.push(s2.pop());//
}

if(!s2.isempty())
{
s3.push(s2.pop());//
search(s1,s2,s3);//
s2.push(s3.pop());//
}
if( s3.isfull())
{
s3.print();
}
}

谁有解决这个问题的算法可以贴过来啊

2006-05-30 21:58
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
#include<iostream>
using namespace std;
class Mstack
{
int size;
int *arr;
int maxRow;
void copyStack(const Mstack& s);
public:
Mstack(int max)
//构造函数
{
size=0;
if(max<=0||max>=100)
{
cout<<"Out of range,give a array with maxRow 100"<<endl;
maxRow=100;
}
else maxRow=max;
arr=new int[maxRow];
}
Mstack(const Mstack& s)
//constructor调用copy函数 ::此题可不要
{
arr=NULL;
copyStack(s);
}
Mstack &operator=(const Mstack& s)
//assignment调用copy函数 ::此题可不要
{
if(this!=&s)
copyStack(s);
return *this;
}
~Mstack(){delete[]arr;}//析构函数
void print()
//打印栈内数据
{
for(int i=0;i<size;i++)
cout<<arr[i]<<" ";
cout<<endl;
}
void getRow(int n1,int n2);//全部排序可能
void printNo(){getRow(maxRow,maxRow);}//打印全部排序方式
void printCount()//打印排列方式总数
{
int ans=1;
for(int i=1;i<maxRow+1;i++)
ans*=i;
cout<<ans<<endl;
}
bool isfull(){return size==maxRow;}//检查是否为满栈::此题可不要
void push(int n)//压栈
{
if(!isfull())
{
size++;
arr[size-1]=n;
}
else cout<<"Cannot push an element into a full stack!"<<endl;
}
int getSize(){return size;}//返回栈内数据总数::此题可不要
bool inside(int elem);//检查elem是否在栈内
void pop(){size--;}//出栈
};
void Mstack::copyStack(const Mstack& s)
{
delete[] arr;
maxRow=s.maxRow;
arr=new int[maxRow];
size=s.size;
for(int i=0;i<size;i++)
arr[i]==s.arr[i];
}
bool Mstack::inside(int elem)
{
for(int i=0;i<size;i++)
if(arr[i]==elem)return true;
return false;
}
//递归
void Mstack::getRow(int n1,int n2)
{
for(int j=1;j<n2+1;j++)
{
if(!inside(j))
{
push(j);
if(n1>1) getRow(n1-1,n2);
if(size== n2)print();
pop();
}
}
}
int main()
{
cout<<"输入编号数量:";
int num;cin>>num;
Mstack s(num);
s.printNo();
s.printCount();
system("pause");
return 0;
}

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-31 12:51
小220
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-30
得分:0 

这道题不是单纯的打印出所有的排列,只能是先到 先进站,进站后就有两种情况,离站或者是下辆车进站。比如n=3,输出有:123,213,321,132,231,但不可能有312这种情况出现。

2006-05-31 13:22
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 

你误解我的意思了,输出n=3,我的程序的运行结果是:
123
213
321
132
231
312
6


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-31 13:49
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
得分:0 
哦,我误会你的意思了,不好意思

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-31 13:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-68478-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.080134 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved