
数据结构与算法
cjj730
这个作者很懒,什么都没留下…
展开
-
递归生成n个元素的所有排列方式
通常我们希望检查n个不同元素的所有排列方式以确定一个最佳的排列。比如,a,b,c的排列方式有: abc, acb, bac, bca, cab和cba. N个元素的排列方式共有n!种。//生成list[k:m]的所有排列方式void Perm(char list[], int k, int m) { int i; if(k==m) { for(i=0;i { printf("%c", li原创 2005-04-24 19:47:00 · 2183 阅读 · 0 评论 -
搜索迷宫路径(stack)
// 寻找从位置(1,1)到出口(m,m)的路径int **maze, m;Stack *path;bool FindPath(){ path=new Stack(m*m-1); Position offset[4]; offset[0].row=0; offset[0].col=1; // right offset[1].row=1; offset[1].col=0; // down offse原创 2005-04-24 20:23:00 · 1053 阅读 · 0 评论 -
括号匹配(stack)
const int MaxLength=100;void PrintMatchedPairs(char *expr){ Stack s(MaxLength); int j, length=strlen(expr); for(int i=1; i { if(expr[i-1]==() s.Add(i); else if(expr[i-1]==)) { s.Delete(j);原创 2005-04-24 20:13:00 · 1009 阅读 · 0 评论 -
等价类
int *E;void Initialize(int n){ E=new int[n+1]; for(int i=1;i E(i)=i;}void Union(int i, int j){ for(int k=1;k if(E(k)==j) E(k)=i;}int Find(int i){ return E(i);}void main(){ int i,j; i=Find(a); j=Fi原创 2005-04-24 20:07:00 · 882 阅读 · 0 评论 -
多项式求值
int PolyEval(int coeff[], int n, const int& x){ int y=1; int value=coeff[0]; for(int i=1; i { y*=x; value+=y*coeff[i]; } return value;}// horner法则求多项式的值//P(x)=(...(Cn*x+Cn-1)*x+Cn-2)*x+Cn-3)*x+...)*原创 2005-04-24 19:58:00 · 1002 阅读 · 0 评论 -
识别图元(Queue)
void Label(){ //初始化围墙 for(int i=0;i { pixel[0][i]=pixel[m+1][i]=0; pixel[i][0]=pixel[i][m+1]=0; } // 初始化offset Position offset[4]; offset[0].row=0; offset[0].col=1; // 右 offset[1].row=1; offset[1].c原创 2005-04-24 20:40:00 · 1037 阅读 · 0 评论 -
开关盒布线(stack)
int net[]={1,2,2,1,3,3,4,4};bool CheckBox(int net[], int n){ Stack *s=new Stack(n); for(int i=0; i { if(!s->IsEmpty()) { if((net[i]==net[s->Top()]) { int x; s->Delete(x); } else s->原创 2005-04-24 20:19:00 · 1706 阅读 · 1 评论 -
箱子排序
// 复杂性为n+rangevoid BinSort(Chain& x, int range){ int len=x.Length(); Node X; Chain *bin; bin=new Chain[range+1]; // 分配到每个箱子中 for(int i=1;i { x.Delete(1, X); bin[X.score].Insert(0,X); } // 从箱子中收集各元素原创 2005-04-24 20:05:00 · 1243 阅读 · 0 评论 -
名次排序
// 计算a[0:n-1]中n个元素的排名void Rank(int a[], int n, int r[]){ int i, j; for(i=0; i r[i]=0; for(i=0; i for(j=0; j if(a[j] r[i]++; else r[j]++;}void Rearrange(int a[], int n, int r[]){ int i; int原创 2005-04-24 20:00:00 · 1366 阅读 · 0 评论 -
寻找电路布线最短路径(Queue)
bool FindPath(Position start, Position finish, int& PathLen, Position* &path){ // 寻找从start 到finish 的最短路径 if((start.row==finish.row) && (start.col==finish.col)) { PathLen=0; return true; } // 初始化包围网格原创 2005-04-24 20:38:00 · 1559 阅读 · 0 评论 -
火车车厢重排
用stack 来实现// k个缓冲铁轨,车厢初始排序为 p[1:n]bool Railroad(int p[], int n, int k){ LinkedStack *H; H=new LinkedStack[k+1]; // 下次要输出的车厢 int NowOut=1; // 缓冲铁轨中编号最小的车厢 int minH=n+1; // minH号车厢对应的缓冲铁轨 int minS; // 车原创 2005-04-24 20:33:00 · 2743 阅读 · 2 评论 -
汉诺塔(Stack)
class Hanoi{ friend void TowersOfHanoi(int); public: void TowersOfHanoi(int n, int x, int y, int z); private: Stack *S[4];};// 把n个碟子从塔X 移到塔Y,可借助塔Zvoid Hanoi::TowersOfHanoi(int n, int x, int y, int z原创 2005-04-24 20:11:00 · 854 阅读 · 0 评论