7、c++版,在大学学的编程基础知识
1、各种排序
#include<iostream>
using namespace std;
//-------直接插入排序
void InsertSort(ElemType A[],int n)
{
ElemType x;
int i,j;
for(i=;i<n;i++)
{
x=A[i];
for(j=i-;j>=;j--)
if(x.stn<A[j].stn) A[j+]=A[j];
else break;
A[j+]=x;
}
}
//----------------------
//-------希尔排序-----
void ShellSort(ElemType A[],int n)
{
ElemType x;
int i,j,d;
for(d=n/;d>=;d/=)
{
for(i=d;i<n;i++)
{
x=A[i];
for(j=i-d;j>=;j-=d)
{
if(x.stn<A[j].stn) A[j+d]=A[j];
else break;
}
A[j+d]=x;
}
}
}
///-----直接选择排序--
void SelectSort(ElemType A[],int n)
{
ElemType x;
int i,j,k;
for(i=;i<=n-;i++)
{
k=i-;
for(j=i;j<=n-;j++)
{
if(A[j].stn<A[k].stn) k=j;
}
if(k!=i-)
{
x=A[i-];A[i-]=A[k];A[k]=x;
}
}
}
//---------冒泡排序----------
void BubbleSort(ElemType A[],int n)
{
ElemType x;
int i,j,flag;
for(i=;i<=n-;i++)
{
flag=;
for(j=n-;j>=i;j--)
if(A[j].stn<A[j-].stn)
{
x=A[j-];A[j-]=A[j];A[j]=x;
flag=;
}
if(flag==) return;
}
}
int main()
{ return ;
}
2、邻接矩阵,外加克鲁斯卡尔,弗洛伊德,普里姆等算法,进行图的遍历,和最小生成树的处理
#include<iostream.h>
#include<stdlib.h>
#include<strstrea.h>
typedef int VertexType;
typedef int WeightType;
const int MaxEdgeNum=;
const int MaxVertexNum=;
const WeightType MaxValue=;
typedef VertexType vexlist[MaxVertexNum];
typedef int adjmatrix[MaxVertexNum][MaxVertexNum];
struct edgenode
{
int adjvex;
WeightType weight;
edgenode*next;
};
typedef edgenode*adjlist[MaxVertexNum];
struct edge
{
int fromvex;
int endvex;
WeightType weight;
};
typedef edge edgeset[MaxEdgeNum];
//#include"4_01栈的顺序存储.cpp"
void PATH(edgenode*path[],int m,int j)
{
edgenode *p,*q,*s;
p=path[j];
while(p!=NULL)
{
path[j]=p->next;
delete p;
p=path[j];
}
p=path[m];
while(p!=NULL)
{
q=new edgenode;
q->adjvex=p->adjvex;
if(path[j]==NULL) path[j]=q;
else s->next=q;
s=q;
p=p->next;
}
q=new edgenode;
q->adjvex=j;
q->next=NULL;
s->next=q;
}
void Dijkstra(adjmatrix GA, int dist[],edgenode* path[], int i, int n)
{
int j,k,w,m;
bool* s=new bool[n];
//分别给s,dist和path数组赋初值
for(j=; j<n; j++) {
if(j==i) s[j]=true; else s[j]=false;
dist[j]=GA[i][j];
if(dist[j]<MaxValue && j!=i) {
edgenode* p1=new edgenode;
edgenode* p2=new edgenode;
p1->adjvex=i; p2->adjvex=j; p2->next=NULL;
p1->next=p2; path[j]=p1;
}
else
path[j]=NULL;
}
for(k=; k<=n-; k++)
{
//求出第k个终点m
w=MaxValue; m=i;
for(j=; j<n; j++)
if(s[j]==false && dist[j]<w) {
w=dist[j]; m=j;
}
if(m!=i) s[m]=true;
else break;
for(j=; j<n; j++)
if(s[j]==false && dist[m]+GA[m][j]<dist[j]) {
dist[j]=dist[m]+GA[m][j];
PATH(path, m, j);
}
}
} void Floyed(adjmatrix GA,adjmatrix A,int n)
{
int i,j,k;
for(i=;i<n;i++)
for(j=;j<n;j++)
A[i][j]=GA[i][j];
for(k=;k<n;k++)
for(i=;i<n;i++)
for(j=;j<n;j++){
if(i==k || j==k || i==j) continue;
if(
A[i][k]+A[k][j]<A[i][j])
A[i][j]=A[i][k]+A[k][j];
}
} void Prim(adjmatrix GA,edgeset CT,int n)
{
int i,j,k,min,t,m,w;
for(i=;i<n-;i++)
{
CT[i].fromvex=;
CT[i].endvex=i+;
CT[i].weight=GA[][i+];
}
for(k=;k<n;k++)
{
min=MaxValue;
m=k-;
for(j=k-;j<n-;j++)
if(CT[j].weight<min)
{
min=CT[j].weight;
m=j;
}
edge temp=CT[k-];
CT[k-]=CT[m];
CT[m]=temp;
j=CT[k-].endvex;
for(i=k;i<n-;i++)
{
t=CT[i].endvex;
w=GA[j][t];
if(w<CT[i].weight)
{
CT[i].weight=w;
CT[i].fromvex=j;
}
}
}
}
void Kruskal(edgeset GE,edgeset CT,int n)
{
int i,j;
bool**s=new bool*[n];
for(i=;i<n;i++)
s[i]=new bool[n];
for(i=;i<n;i++)
{
for(j=;j<n;j++)
if(i==j) s[i][j]=true;
else s[i][j]=false;
}
int k=;
int d=;
int m1,m2;
while(k<n)
{
for(i=;i<n;i++)
{
if(s[i][GE[d].fromvex]==true) m1=i;
if(s[i][GE[d].endvex]==true) m2=i;
}
if(m1!=m2)
{
CT[k-]=GE[d];
k++;
for(j=;j<n;j++)
{
s[m1][j]=s[m1][j]||s[m2][j];
s[m2][j]=false;
}
}
d++;
}
for(i=;i<n;i++)
delete[]s[i];
delete[]s;
}
//边集数组 void InitArray(edgeset GE)
{
for(int i=;i<MaxEdgeNum;i++)
{
GE[i].fromvex=GE[i].endvex=-;
GE[i].weight=MaxValue;
}
}
void CreateArray(edgeset GE,int n,char*s,int k)
{
istrstream sin(s);
char c1,c2,c3;
int i,j,c=;
WeightType w;
sin>>c1;
if(k==){
do{
sin>>c1>>i>>c2>>j>>c3;
GE[c].fromvex=i;
GE[c].endvex=j;
GE[c].weight=;
c++;
sin>>c1;
}while(c1==',');
}
else{
do{
sin>>c1>>i>>c2>>j>>c3>>w;
GE[c].fromvex=i;
GE[c].endvex=j;
GE[c].weight=w;
c++;
sin>>c1;
}while(c1==',');
}
}
void Arry(edgeset GE,int i,int n,bool*visited)
{
int j=i,k=;
while(k!=n)
{
for(int t=;GE[t].fromvex!=-;t++)
{
if(GE[t].fromvex==j&&!visited[j])
{
cout<<j<<" ";
visited[j]=true;
j=GE[t].endvex;
k++;
break;
}
}
if(GE[t].fromvex==-)
{
cout<<j<<" ";
k++;
}
}
}
void Arry2(edgeset GE,int i,int n,bool*visited)
{
int j=i,k=;
int q[];
int front=,rear=;
cout<<j<<" ";
while(k!=n)
{
for(int t=;GE[t].fromvex!=-;t++)
{
if(GE[t].fromvex=j&&!visited[j])
{
cout<<GE[t].endvex<<" ";
k++;
q[rear]=GE[t].endvex;
rear=(rear+)%;
}
else
{
visited[j]=true;
j=q[front];
front=(front+)%;
break;
}
}
}
} void InitAdjoin(adjlist GL)
{
for(int i=;i<MaxVertexNum;i++)
GL[i]=NULL;
}
void CreateAdjoin(adjlist GL,int n,char*s,int k1,int k2)
{
istrstream sin(s);
char c1,c2,c3;
int i,j;
WeightType w;
edgenode*p;
sin>>c1;
if(k2==){
do{
sin>>c1>>i>>c2>>j>>c3;
p=new edgenode; p->adjvex=j;p->weight=;
p->next=GL[i];
GL[i]=p;
if(k1==){
p=new edgenode;
p->adjvex=i;p->weight=;
p->next=GL[j];
GL[j]=p;
}
sin>>c1;
}while(c1==',');
}
else{
do{
sin>>c1>>i>>c2>>j>>c3>>w;
p=new edgenode;
p->adjvex=j;p->weight=w;
p->next=GL[i];
GL[i]=p;
if(k1==)
{
p=new edgenode;
p->adjvex=i;p->weight=w;
p->next=GL[j];
GL[j]=p;
}
sin>>c1;
}while(c1==',');
}
} void InitMatrix(adjmatrix GA,int k)
{
int i,j;
for(i=;i<MaxVertexNum;i++)
for(j=;j<MaxVertexNum;j++)
if(i==j) GA[i][j]=;
else if(k) GA[i][j]=MaxValue;
else GA[i][j]=;
}
void CreateMatrix(adjmatrix GA,int n,char*s,int k1,int k2)
{
istrstream sin(s);
char c1,c2,c3;
int i,j;
WeightType w;
sin>>c1;
if(k1==&&k2==)
do{
sin>>c1>>i>>c2>>j>>c3;
GA[i][j]=GA[j][i]=;
sin>>c1;
if(c1==')')break;
}while();
else if(k1==&&k2!=)
do{
sin>>c1>>i>>c2>>j>>c3>>w;
GA[i][j]=GA[j][i]=w;
sin>>c1;
if(c1==')')break;
}while();
else if(k1!= && k2==)
do{
sin>>c1>>i>>c2>>j>>c3;
GA[i][j]=;
sin>>c1;
if(c1==')')break;
}while();
else if(k1!= && k2!=)
do{
sin>>c1>>i>>c2>>j>>c3>>w;
GA[i][j]=w;
sin>>c1;
if(c1==')')break;
}while();
}
void dfsMatrix(adjmatrix GA,int i,int n,bool*visited)
{
Stack M;
InitStack(M);
int j=i;
visited[i]=true;
cout<<j<<" ";
Push(M,j);
while(j!=n||M.top!=)
{
if(j==n+)
{
j=M.stack[M.top];
M.top--;
}
if(GA[M.stack[M.top]][j]!=&&!visited[j])
{
visited[j]=true;
Push(M,j);
cout<<j<<" ";
j=;
}
else
j++;
}
} /*void dfsAdjoin(adjlist GL,int i,int n,bool*visited)
{
cout<<i<<" ";
visited[i]=true;
edgenode*p=GL[i];
while(p!=NULL)
{
int j=p->adjvex;
if(!visited[j])
dfsAdjoin(GL,j,n,visited);
p=p->next;
}
}*/
void dfsAdjoin(adjlist GL,int i,int n,bool*visited)
{
Stack M;
InitStack(M);
cout<<i<<" ";
Push(M,i);
visited[i]=true;
edgenode*p=GL[i];
while(p!=NULL||M.top!=)
{
if(p==NULL)
{
M.top--;
p=GL[M.stack[M.top]];
}
int j=p->adjvex; if(!visited[j])
{
visited[j]=true;
cout<<j<<" ";
Push(M,j);
p=GL[M.stack[M.top]];
}
else
{
p=p->next;
}
}
} int main()
{
int i,n,k1,k2;
cout<<"输入待处理图的顶点数:";
cin>>n;
cout<<"输入图的有向和有无权选择(0为无,非0为有):";
cin>>k1>>k2;
bool*visited=new bool[n];
adjmatrix ga;
InitMatrix(ga,k2);
cout<<"输入图的边集;";
char*a=new char[];
cin>>a;
CreateMatrix(ga,n,a,k1,k2);
cout<<"按图的邻接矩阵得到的深度优先遍历序列:"<<endl;
for(i=;i<n;i++)
visited[i]=false;
dfsMatrix(ga,,n,visited);
cout<<endl;
cout<<"按图的邻接表得到的深度优先遍历序列:"<<endl;
adjlist ka;
InitAdjoin(ka);
CreateAdjoin(ka,n,a,k1,k2);
for(i=;i<n;i++)
visited[i]=false;
dfsAdjoin(ka,,n,visited);
cout<<endl;
for(i=;i<n;i++)
visited[i]=false;
edgeset ke;
InitArray(ke);
CreateArray(ke,n,a,);
//Arry(ke,0,n,visited);
//cout<<endl;
//for(i=0;i<n;i++)
visited[i]=false;
//Arry2(ke,0,n,visited); return ;
}
3、栈的顺序存储
//typedef int ElemType;
/*struct Stack
{
ElemType *stack;
int top;
int MaxSize;
};*/ //1. 初始化栈S为空
void InitStack(Stack& S)
{
//初始设置栈空间大小为10
S.MaxSize=;
//动态存储空间分配
S.stack=new ElemType[S.MaxSize];
if(!S.stack){
cout<<"动态存储分配失败!"<<endl;
exit();
}
//初始置栈为空
S.top=-;
}
//2. 元素item进栈,即插入到栈顶
void Push(Stack& S, ElemType item)
{
//若栈空间用完则自动扩大2倍空间,原有栈内容不变
if(S.top==S.MaxSize-) {
int k=sizeof(ElemType); //计算每个元素存储空间的长度
S.stack=(ElemType*)realloc(S.stack, *S.MaxSize*k);
S.MaxSize=*S.MaxSize; //把栈空间大小修改为新的长度
}
//栈顶指针后移一个位置
S.top++;
//将新元素插入到栈顶
S.stack[S.top]=item;
}
//3. 删除栈顶元素并返回
ElemType Pop(Stack& S)
{
//若栈空则退出运行
if(S.top==-) {
cout<<"栈空,退出运行!"<<endl;
exit();
}
//栈顶指针减1表示退栈
S.top--;
//返回原栈顶元素的值
return S.stack[S.top+];
}
//4. 读取栈顶元素的值
ElemType Peek(Stack& S)
{
//若栈空则退出运行
if(S.top==-) {
cout<<"Stack is empty!"<<endl;
exit();
}
//返回栈顶元素的值
return S.stack[S.top];
}
//5. 判断栈是否为空
bool EmptyStack(Stack& S)
{
return S.top==-;
}
//6. 清除栈中的所有元素并释放动态存储空间
void ClearStack(Stack& S)
{
if(S.stack) {
delete []S.stack;
S.stack=;
}
S.top=-;
S.MaxSize=;
}
4、边集数组深度优先搜索
void Arry(edgeset GE,int i,int n,bool*visited)
{
int j=i,k=;
while(k!=n)
{
for(int t=;GE[t].fromvex!=-;t++)
{
if(GE[t].fromvex==j&&!visited[j])
{
cout<<j<<" ";
visited[j]=true;
j=GE[t].endvex;
k++;
break;
}
}
if(GE[t].fromvex==-)
{
cout<<j<<" ";
k++;
}
}
}
5、非递归邻接表
void dfsAdjoin(adjlist GL,int i,int n,bool*visited)
{
Stack M;
InitStack(M);
cout<<i<<" ";
Push(M,i);
visited[i]=true;
edgenode*p=GL[i];
while(p!=NULL||M.top!=)
{
if(p==NULL)
{
M.top--;
p=GL[M.stack[M.top]];
}
int j=p->adjvex; if(!visited[j])
{
visited[j]=true;
cout<<j<<" ";
Push(M,j);
p=GL[M.stack[M.top]];
}
else
{
p=p->next;
}
}
}
6、非递归链接矩阵
void dfsMatrix(adjmatrix GA,int i,int n,bool*visited)
{
Stack M;
InitStack(M);
int j=i;
visited[i]=true;
cout<<j<<" ";
Push(M,j);
while(j!=n||M.top!=)
{
if(j==n+)
{
j=M.stack[M.top];
M.top--;
}
if(GA[M.stack[M.top]][j]!=&&!visited[j])
{
visited[j]=true;
Push(M,j);
cout<<j<<" ";
j=;
}
else
j++;
}
}
7、哈夫曼编码
#include<iostream>
using namespace std;
#include<stdlib.h>
#include<fstream>
#include<string>
typedef int ElemType;
struct save
{
char a2[];
int lenth;
};
save minma[];
struct BTreeNode
{
ElemType data;
BTreeNode*left;
BTreeNode*right;
};
int count=;
BTreeNode*CreateHuffman(ElemType a[],int n)
{
BTreeNode**b,*q;
b=new BTreeNode*[n];
int i,j;
for(i=;i<n;i++)
{
b[i]=new BTreeNode;
b[i]->data=a[i];b[i]->left=b[i]->right=NULL;
}
for(i=;i<n;i++)
{
int k1=-,k2;
for(j=;j<n;j++)
{
if(b[j]!=NULL&&k1==-) {k1=j;continue;}
if(b[j]!=NULL) {k2=j;break;}
}
for(j=k2;j<n;j++)
{
if(b[j]!=NULL)
{
if(b[j]->data<b[k1]->data) {k2=k1;k1=j;}
else if(b[j]->data<b[k2]->data) k2=j;
}
}
q=new BTreeNode;
q->data=b[k1]->data+b[k2]->data;
q->left=b[k1];q->right=b[k2];
b[k1]=q;b[k2]=NULL;
}
delete []b;
return q;
}
void HuffManCoding(BTreeNode*FBT,int len)
{
static char a[];
if(FBT!=NULL)
{
if(FBT->left==NULL&&FBT->right==NULL)
{
for(int i=;i<len;i++)
{
minma[count].a2[i]=a[i];
}
minma[count].lenth=len;
count++;
}
else{
a[len]=;HuffManCoding(FBT->left,len+);
a[len]=;HuffManCoding(FBT->right,len+);
}
}
}
int main()
{
BTreeNode *m;
char a1[];
for(int i=;i<;i++)
{
a1[i]=+i;
}
int a3[];
ifstream f1("新建文本文档.txt",ios::out);
int j;
i=;
while(!f1.eof())
if(f1>>j) a3[i++]=j;
m=CreateHuffman(a3,);
HuffManCoding(m,);
int total=;
cout<<"请输入一串字符"<<endl;
char s1[];
cin>>s1;
cout<<"它们所对应的密文分别是"<<endl;
char *q=s1;
while(q[total]!='\0')
total++;
for(i=;i<total;i++)
{
for(j=;j<;j++)
{
if(s1[i]==a1[j])
{
for(int k=;k<minma[j].lenth;k++)
cout<<(int)minma[j].a2[k]<<" ";
cout<<endl;
}
} } return ;
}
"新建文本文档.txt"
23 45 12 87 103 54 99 46 97 82 98 65 38 84 56 55 78 77 47 73 91 86 4 5 40 3 8、邻接矩阵与邻接表
#include<iostream.h>
#include<stdlib.h>
#include<strstrea.h>
typedef int VertexType;
typedef int WeightType;
const int MaxEdgeNum=;
const int MaxVertexNum=;
const WeightType MaxValue=;
typedef VertexType vexlist[MaxVertexNum];
typedef int adjmatrix[MaxVertexNum][MaxVertexNum];
#include"4_01栈的顺序存储.cpp"
void Prim(adjmatrix GA,edgest CT,int n)
{
int i,j,k,min,t,m,w;
for(i=;i<n-;i++)
{
CT[i].fromvex=;
CT[i].endvex=i+;
CT[i].weight=GA[][i+];
}
for(k=;k<n;k++)
{
min=MaxValue;
m=k-;
for(j=k-;j<n-;j++)
if(CT[j].weight<min)
{
min=CT[j].weight;
m=j;
}
edge temp=CT[k-];
CT[k-]=CT[m];
CT[m]=temp;
j=CT[k-].endvex;
for(i=k;i<n-;i++)
{
t=CT[i].endvex;
w=GA[j][t];
if(w<CT[i].weight)
{
CT[i].weight=w;
CT[i].fromvex=j;
}
}
}
}
void Kruskal(edgeset GE,edgeset CT,int n)
{
int i,j;
bool**s=new bool*[n];
for(i=;i<n;i++)
s[i]=new bool[n];
for(i=;i<n;i++)
{
for(j=;j<n;j++)
if(i==j) s[i][j]=true;
else s[i][j]=false;
}
int k=;
int d=;
int m1,m2;
while(k<n)
{
for(i=;i<n;i++)
{
if(s[i][GE[d].fromvex]==true) m1=i;
if(s[i][GE[d].endvex]==true) m3=i;
}
if(m1!=m2)
{
CT[k-]=GE[d];
k++;
for(j=;j<n;j++)
{
s[m1][j]=s[m1][j]||s[m2][j];
s[m2][j]=false;
}
}
d++;
}
for(i=;i<n;i++)
delete[]s[i];
delete[]s;
}
//边集数组
struct edge
{
int fromvex;
int endvex;
WeightType weight;
};
typedef edge edgeset[MaxEdgeNum];
void InitArray(edgeset GE)
{
for(int i=;i<MaxEdgeNum;i++)
{
GE[i].fromvex=GE[i].endvex=-;
GE[i].weight=MaxValue;
}
}
void CreateArray(edgeset GE,int n,char*s,int k)
{
istrstream sin(s);
char c1,c2,c3;
int i,j,c=;
WeightType w;
sin>>c1;
if(k==){
do{
sin>>c1>>i>>c2>>j>>c3;
GE[c].fromvex=i;
GE[c].endvex=j;
GE[c].weight=;
c++;
sin>>c1;
}while(c1==',');
}
else{
do{
sin>>c1>>i>>c2>>j>>c3>>w;
GE[c].fromvex=i;
GE[c].endvex=j;
GE[c].weight=w;
c++;
sin>>c1;
}while(c1==',');
}
}
void Arry(edgeset GE,int i,int n,bool*visited)
{
int j=i,k=;
while(k!=n)
{
for(int t=;GE[t].fromvex!=-;t++)
{
if(GE[t].fromvex==j&&!visited[j])
{
cout<<j<<" ";
visited[j]=true;
j=GE[t].endvex;
k++;
break;
}
}
if(GE[t].fromvex==-)
{
cout<<j<<" ";
k++;
}
}
}
void Arry2(edgeset GE,int i,int n,bool*visited)
{
int j=i,k=;
int q[];
int front=,rear=;
cout<<j<<" ";
while(k!=n)
{
for(int t=;GE[t].fromvex!=-;t++)
{
if(GE[t].fromvex=j&&!visited[j])
{
cout<<GE[t].endvex<<" ";
k++;
q[rear]=GE[t].endvex;
rear=(rear+)%;
}
else
{
visited[j]=true;
j=q[front];
front=(front+)%;
break;
}
}
}
} struct edgenode
{
int adjvex;
WeightType weight;
edgenode*next;
};
typedef edgenode*adjlist[MaxVertexNum];
void InitAdjoin(adjlist GL)
{
for(int i=;i<MaxVertexNum;i++)
GL[i]=NULL;
}
void CreateAdjoin(adjlist GL,int n,char*s,int k1,int k2)
{
istrstream sin(s);
char c1,c2,c3;
int i,j;
WeightType w;
edgenode*p;
sin>>c1;
if(k2==){
do{
sin>>c1>>i>>c2>>j>>c3;
p=new edgenode; p->adjvex=j;p->weight=;
p->next=GL[i];
GL[i]=p;
if(k1==){
p=new edgenode;
p->adjvex=i;p->weight=;
p->next=GL[j];
GL[j]=p;
}
sin>>c1;
}while(c1==',');
}
else{
do{
sin>>c1>>i>>c2>>j>>c3>>w;
p=new edgenode;
p->adjvex=j;p->weight=w;
p->next=GL[i];
GL[i]=p;
if(k1==)
{
p=new edgenode;
p->adjvex=i;p->weight=w;
p->next=GL[j];
GL[j]=p;
}
sin>>c1;
}while(c1==',');
}
} void InitMatrix(adjmatrix GA,int k)
{
int i,j;
for(i=;i<MaxVertexNum;i++)
for(j=;j<MaxVertexNum;j++)
if(i==j) GA[i][j]=;
else if(k) GA[i][j]=MaxValue;
else GA[i][j]=;
}
void CreateMatrix(adjmatrix GA,int n,char*s,int k1,int k2)
{
istrstream sin(s);
char c1,c2,c3;
int i,j;
WeightType w;
sin>>c1;
if(k1==&&k2==)
do{
sin>>c1>>i>>c2>>j>>c3;
GA[i][j]=GA[j][i]=;
sin>>c1;
if(c1==')')break;
}while();
else if(k1==&&k2!=)
do{
sin>>c1>>i>>c2>>j>>c3>>w;
GA[i][j]=GA[j][i]=w;
sin>>c1;
if(c1==')')break;
}while();
else if(k1!= && k2==)
do{
sin>>c1>>i>>c2>>j>>c3;
GA[i][j]=;
sin>>c1;
if(c1==')')break;
}while();
else if(k1!= && k2!=)
do{
sin>>c1>>i>>c2>>j>>c3>>w;
GA[i][j]=w;
sin>>c1;
if(c1==')')break;
}while();
}
void dfsMatrix(adjmatrix GA,int i,int n,bool*visited)
{
Stack M;
InitStack(M);
int j=i;
visited[i]=true;
cout<<j<<" ";
Push(M,j);
while(j!=n||M.top!=)
{
if(j==n+)
{
j=M.stack[M.top];
M.top--;
}
if(GA[M.stack[M.top]][j]!=&&!visited[j])
{
visited[j]=true;
Push(M,j);
cout<<j<<" ";
j=;
}
else
j++;
}
} /*void dfsAdjoin(adjlist GL,int i,int n,bool*visited)
{
cout<<i<<" ";
visited[i]=true;
edgenode*p=GL[i];
while(p!=NULL)
{
int j=p->adjvex;
if(!visited[j])
dfsAdjoin(GL,j,n,visited);
p=p->next;
}
}*/
void dfsAdjoin(adjlist GL,int i,int n,bool*visited)
{
Stack M;
InitStack(M);
cout<<i<<" ";
Push(M,i);
visited[i]=true;
edgenode*p=GL[i];
while(p!=NULL||M.top!=)
{
if(p==NULL)
{
M.top--;
p=GL[M.stack[M.top]];
}
int j=p->adjvex; if(!visited[j])
{
visited[j]=true;
cout<<j<<" ";
Push(M,j);
p=GL[M.stack[M.top]];
}
else
{
p=p->next;
}
}
} int main()
{
int i,n,k1,k2;
cout<<"输入待处理图的顶点数:";
cin>>n;
cout<<"输入图的有向和有无权选择(0为无,非0为有):";
cin>>k1>>k2;
bool*visited=new bool[n];
adjmatrix ga;
InitMatrix(ga,k2);
cout<<"输入图的边集;";
char*a=new char[];
cin>>a;
CreateMatrix(ga,n,a,k1,k2);
cout<<"按图的邻接矩阵得到的深度优先遍历序列:"<<endl;
for(i=;i<n;i++)
visited[i]=false;
dfsMatrix(ga,,n,visited);
cout<<endl;
cout<<"按图的邻接表得到的深度优先遍历序列:"<<endl;
adjlist ka;
InitAdjoin(ka);
CreateAdjoin(ka,n,a,k1,k2);
for(i=;i<n;i++)
visited[i]=false;
dfsAdjoin(ka,,n,visited);
cout<<endl;
for(i=;i<n;i++)
visited[i]=false;
edgeset ke;
InitArray(ke);
CreateArray(ke,n,a,);
Arry(ke,,n,visited);
cout<<endl;
for(i=;i<n;i++)
visited[i]=false;
Arry2(ke,,n,visited); return ;
}
9、迷宫程序
#include<iostream>
#include <windows.h>
#include<ctime>
#include<cstdlib>
#include<string>
using namespace std;
const int m=,n=;
char maze[m+][n+];
char mark[m+][n+];
int move[][]={{,},{,},{,-},{-,}};
struct position
{
int a;
int b;
};
typedef position ElemType;
struct Stack
{
ElemType *stack;
int top;
int MaxSize;
};
#include"4_01栈的顺序存储.cpp"
void output(ElemType &t)
{
cout<<"("<<t.a<<" "<<t.b<<")"<<endl;
}
bool SeekPath(int x,int y)
{
Stack M;
InitStack(M);
int i,j,k=,t;
ElemType item1,item2;
int g=x,h=y;
item1.a=g;
item1.b=h;
Push(M,item1);
mark[g][h]=;
while((g!=m)||(h!=n))
{
item1.a=g;
item1.b=h;
k=;
for(i=;i<;i++)
{
g=g+move[i][];h=h+move[i][];
if((maze[g][h]==)&&(mark[g][h]==))
{
maze[g][h]=;
for(i=;i<m+;i++)
{
for(j=;j<n+;j++)
{
cout<<maze[i][j]<<" ";
}
cout<<endl;
}
Sleep();
system("cls");
Sleep();
mark[g][h]=;
item2.a=g;
item2.b=h;
Push(M,item2);break;
}
else
{
k++;
g=item1.a;
h=item1.b;
}
} if((g==)&&(h==)&&(k==))
{
cout<<"失败"<<endl;
t=;
break;
}
if(k==)
{
g=M.stack[M.top-].a;
h=M.stack[M.top-].b;
M.top--;
}
}
if(t!=)
{
while(M.top!=-)
{
output(M.stack[M.top]);
M.top--;
}
return true;
}
else
return false;
}
int main()
{
int i,j;
for(i=;i<m+;i++)
maze[][i]=;
for(j=;j<n+;j++)
maze[j][i-]=;
for(i=;i<m+;i++)
maze[j-][i]=;
for(j=;j<m+;j++)
maze[j][]=;
srand(unsigned(time()));
for(i=;i<m+;i++)
{
for(j=;j<n+;j++)
{
double some=(rand()%)/10.0;
if(some>0.25)
maze[i][j]=;
else
maze[i][j]=;
}
}
maze[m][n]=;
for(i=;i<m+;i++)
{
for(j=;j<n+;j++)
mark[i][j]=;
}
mark[][]=;
for(i=;i<m+;i++)
{
for(j=;j<n+;j++)
{
cout<<maze[i][j]<<" ";
}
cout<<endl;
}
SeekPath(,);
return ;
}
10、图实现教学楼的寻找
#include<iostream>
#include<strstrea.h>
#include<fstream>
#include<string>
using namespace std;
typedef int VertexType;
typedef int WeightType;
const int MaxVertexNum=;
const int MaxEdgeNum=;
const WeightType MaxValue=;
typedef VertexType vexlist[MaxVertexNum];
typedef int adjmatrix[MaxVertexNum][MaxVertexNum]; void InitMatrix(adjmatrix GA,int k)
{
int i,j;
for(i=;i<MaxVertexNum;i++)
for(j=;j<MaxVertexNum;j++)
if(i==j) GA[i][j]=;
else if(k) GA[i][j]=MaxValue;
else GA[i][j]=;
}
void CreateMatrix(adjmatrix GA,int n,char*s,int k1,int k2)
{
istrstream sin(s);
char c1,c2,c3;
int i,j;
WeightType w;
sin>>c1;
if(k1==&&k2==)
do{
sin>>c1>>i>>c2>>j>>c3;
GA[i][j]=GA[j][i]=;
sin>>c1;
if(c1==')') break;
}while();
else if(k1==&&k2!=)
do{
sin>>c1>>i>>c2>>j>>c3>>w;
GA[i][j]=GA[j][i]=w;
sin>>c1;
if(c1==')') break;
}while();
else if(k1!=&&k2==)
do{
sin>>c1>>i>>c2>>j>>c3;
GA[i][j]=;
sin>>c1;
if(c1==')') break;
}while();
else if(k1!= &&k2!=)
do{
sin>>c1>>i>>c2>>j>>c3>>w;
GA[i][j]=w;
sin>>c1;
if(c1==')') break;
}while();
}
void dfsMatrix(adjmatrix GA,int i,int n,bool*visited,string a[])
{
std::cout<<a[i]<<" ";
visited[i]=true;
for(int j=;j<n;j++)
if(GA[i][j]!= && GA[i][j]!=MaxValue && !visited[j])
dfsMatrix(GA,j,n,visited,a);
}
void Prim(adjmatrix GA,edgeset CT,int n)
{
int i,j,k,min,t,m,w;
for(i=;i<n-;i++)
{
CT[i].fromvex=;
CT[i].endvex=i+;
CT[i].weight=GA[][i+];
}
for(k=;k<n;k++}
{
min=MaxValue;
m=k-;
for(j=k-;j<m-;j++)
{
if(CT[j].weight<min)
{
min=CT[j].weight;
m=j;
}
edge temp=CT[k-];
CT[k-]=CT[m];
CT[m]=temp;
j=CT[k-].endvex;
for(i=k;i<n-;i++)
{
t=CT[i].endvex;
w=GA[j][t];
if(w<CT[i].weight)
{
CT[i].weight=w;
CT[i].fromvex=j;
}
}
}
} int main()
{ string a[];
int i=;
adjmatrix A;
ifstream f1("新建文本文档 (2).txt",ios::out);
if(!f1)
{
std::cout<<"新建文本文档 (2).txt do not found";
exit();
}
string s;
while(!f1.eof())
if(f1>>s) a[i++]=s;
InitMatrix(A,);
char *s1;
s1=new char [];
ifstream f2("新建文本文档 (3).txt",ios::out);
if(!f2)
{
std::cout<<"新建文本文档 (3).txt do not found";
exit();
}
char m;
i=;
while(!f2.eof())
if(f2>>m) s1[i++]=m;
/*for(i=0;i<62;i++)
std::cout<<s1[i];*/
CreateMatrix(A,,s1,,);
bool *visited=new bool [];
for(i=;i<;i++)
visited[i]=false;
dfsMatrix(A,,,visited,a); return ;
}
新建文本文档(2)
主楼 博雅楼 知行楼 三舍 图书馆 致远楼 新华楼 中和楼
新建文本文档(3)
( ( 0 , 6 ) 2 ,( 0 , 2 ) 4 ,( 0 , 5 ) 1 ,( 0 , 3 ) 1 ,( 1 , 5 ) 2 ,( 1 , 7 ) 1 ,( 2 , 4 ) 3 ,( 3 , 6 ) 2 ,( 6 , 7 ) 3 )
11、拓补排序
void Toposort(adjlilst GL,int n)
{
int i,j,k,top,m=;
edgenode*p;
int *d=new int[n];
for(i=;i<n;i++)
d[i]=;
for(i=;i<n;i++)
{
p=GL[i];
while(p!=NULL)
{
j=p->adjvex;d[j]++;p=p->next;
}
}
top=-;
for(i=;i<n;i++)
if(d[i]==) {d[i]=top;top=i;}
while(top!=-)
{
j=top;
top=d[top];
cout<<j<<" ";
m++;
p=GL[j];
while(p!=NULL)
{
k=p->adjvex;
d[k]--;
if(d[k]==)
{
d[k]=top;top=k;
}
p=p->next;
}
}
cout<<endl;
if(m<n) cout<<"The network has a cycle!"<<endl;
delete []d;
}
12、稀疏矩阵的转置乘法与加法
#include<iostream>
using namespace std;
typedef int ElemType;
struct Triple
{
int row,col;
ElemType val;
};
struct SMatrix
{
int m,n,t;
Triple sm[];
};
void InitMatrix(SMatrix & M)
{
M.m=;
M.n=;
M.t=;
}
void InputMatrix(SMatrix &M,int m,int n)
{
M.m=m;
M.n=n;
int row,col,val;
int k=;
cin>>row>>col>>val;
while(row!=)
{
k++;
M.sm[k].row=row;
M.sm[k].col=col;
M.sm[k].val=val;
cin>>row>>col>>val;
}
M.t=k;
}
SMatrix FastTranspose(SMatrix &M)
{
SMatrix S;
InitMatrix(S);
S.m=M.n; S.n=M.m; S.t=M.t;
if(S.t==) return S;
int* num=new int[M.n+];
int* pot=new int[M.n+];
int col,i;
for(col=;col<=M.n;col++)
num[col]=;
for(i=;i<=M.t;i++)
{
int j=M.sm[i].col;
num[j]++;
}
pot[]=;
for(col=;col<=M.n;col++)
pot[col]=pot[col-]+num[col-];
for(i=;i<=M.t;i++)
{
int j=M.sm[i].col;
int k=pot[j];
S.sm[k].row=j;
S.sm[k].col=M.sm[i].row;
S.sm[k].val=M.sm[i].val;
pot[j]++;
}
delete[] num;
delete[] pot;
return S;
}
void output(SMatrix &M)
{
int k=;
for(int i=;i<=M.m;i++)
{
for(int j=;j<=M.n;j++)
{
if((M.sm[k].row==i)&&(M.sm[k].col==j))
{
cout<<M.sm[k].val<<" ";
k++;
}
else
cout<<""<<" ";
}
cout<<endl;
}
}
SMatrix Add(SMatrix& M1,SMatrix& M2)
{
SMatrix M;
InitMatrix(M);
if((M1.m!=M2.m)||(M1.n!=M2.n))
{
cout<<"两矩阵规格不一样"<<endl;
exit();
}
M.m=M1.m;M.n=M1.n;
if((M1.t==)&&(M2.t==))
return M;
int k,t=;
for(k=;k<=M1.t;k++)
{
if((M1.sm[k].row==M2.sm[k].row)&&(M1.sm[k].col=M2.sm[k].col))
{
M.sm[t].row=M1.sm[k].row;
M.sm[t].col=M1.sm[k].col;
M.sm[t].val=M1.sm[k].val+M2.sm[k].val;
t++;
}
else
{
if(M1.sm[k].val==)
{
M.sm[t].row=M1.sm[k].row;
M.sm[t].col=M1.sm[k].col;
M.sm[t].val=M2.sm[k].val;
}
else
{
if(M2.sm[k].val==)
{
M.sm[t].row=M2.sm[k].row;
M.sm[t].col=M2.sm[k].col;
M.sm[t].val=M1.sm[k].val;
}
}
t++;
}
M.t=t;
}
return M;
}
SMatrix chengfa(SMatrix &M1,SMatrix &M2)
{
SMatrix M3;
InitMatrix(M3);
M3.n=M1.m;
M3.m=M2.n;
if(M1.n!=M2.m)
cout<<"两矩阵不能相乘"<<endl;
else
{
int h=;
for(int i=;i<=M1.m;i++)
{
for(int j=;j<=M2.n;j++)
{
int sum=;
for(int t=;t<=M1.t;t++)
{
for(int k=;k<=M2.t;k++)
{
if((M1.sm[t].row==i)&&(M2.sm[k].col==j))
if(M2.sm[k].row==M1.sm[t].col)
sum+=M1.sm[t].val*M2.sm[k].val;
else
sum+=;
else
sum+=;
}
}
h++;
M3.sm[h].val=sum;
M3.sm[h].row=i;
M3.sm[h].col=j;
}
}
M3.t=h;
}
return M3;
}
int main()
{
cout<<"请选择操作序号"<<endl;
cout<<"1 转质 2 加法 3 乘法"<<endl;
char a;
cin>>a;
switch(a)
{
case '':
{
SMatrix p;
InitMatrix(p);
int m,n;
cout<<"请输入稀疏矩阵的行数和列数"<<endl;
cin>>m>>n;
cout<<"请输入非零元素所在行数 列数 元素值 输入完后以 0 0 0结束"<<endl;
InputMatrix(p,m,n);
output(FastTranspose(p));
};break;
case '':
{
SMatrix a,b;
InitMatrix(a);
cout<<"请输入稀疏矩阵1的行数和列数"<<endl;
int m1,n1;
cin>>m1>>n1;
cout<<"请输入稀疏矩阵1非零元素所在的行 列 值 输入完后以 0 0 0结束"<<endl;
InputMatrix(a,m1,n1);
InitMatrix(b);
cout<<"请输入稀疏矩阵2的行数和阶数"<<endl;
int m2,n2;
cin>>m2>>n2;
cout<<"请输入稀疏矩阵2中非零元素的行 列 值 输入完后以 0 0 0结束 "<<endl;
InputMatrix(b,m2,n2);
output(Add(a,b));
};break;
case '':
{
SMatrix a,b;
InitMatrix(a);
cout<<"请输入稀疏矩阵1的行数和列数"<<endl;
int m1,n1;
cin>>m1>>n1;
cout<<"请输入稀疏矩阵1非零元素所在的行 列 值 输入完后以 0 0 0结束"<<endl;
InputMatrix(a,m1,n1);
InitMatrix(b);
cout<<"请输入稀疏矩阵2的行数和阶数"<<endl;
int m2,n2;
cin>>m2>>n2;
cout<<"请输入稀疏矩阵2中非零元素的行 列 值 输入完后以 0 0 0结束"<<endl;
InputMatrix(b,m2,n2);
output(chengfa(a,b));
};break;
}
return ;
}
最后说一句,以上都是扯淡,都是扯淡,能挣着钱才是王道呀!!!!!!
孩子我还是太幼稚
7、c++版,在大学学的编程基础知识的更多相关文章
- SHELL脚本编程基础知识
SHELL脚本编程基础知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux之父Linus有一句话很经典:"Talk is cheap, show me the ...
- 16第一章 ASP.Net编程基础知识
第一章 ASP.Net编程基础知识 第一章 ASP.Net编程基础知识 本章首先介绍用ASP.Net技术编制服务器端动态网页所需的网络和HTML标记语言方面的有关知识.然后 ...
- C#网络编程基础知识
C#网络编程基础知识一 1.IPAddress类 用于表示一个IP地址.IPAddress默认构造函数 public IPAddress(long address);一般不用 其中Parse()方法最 ...
- 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备
相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结.所以下面给大家分享一下我的经验: 微信公众号是什么? 官网的介绍:再小的个 ...
- TCP与UDP比较 以及并发编程基础知识
一.tcp比udp真正可靠地原因 1.为什么tcp比udp传输可靠地原因: 我们知道在传输数据的时候,数据是先存在操作系统的缓存中,然后发送给客户端,在客户端也是要经过客户端的操作系统的,因为这个过程 ...
- Jquery真的不难~第一回 编程基础知识
Jquery真的不难~第一回 编程基础知识 回到目录 前言 说Jquery之前,先来学习一下Javascript(以后简称为JS)语言中的基础知识问题,其时对于每种编程语言来说基础知识都是大同小异 ...
- 1.unix网络编程基础知识
接触网络编程一年多了,最近在系统的学习vnp两本书,对基础知识做一些总结,希望理解的更透彻清晰,希望能有更多的沉淀. 1.套接口地址 针对IPv4和IPv6地址族,分别定义了两种类型的套接口地址:so ...
- 你得学会并且学得会的Socket编程基础知识
这一篇文章,我将图文并茂地介绍Socket编程的基础知识,我相信,如果你按照步骤做完实验,一定可以对Socket编程有更好地理解. 本文源代码,可以通过这里下载 http://files.cnblog ...
- PHP CLI编程基础知识积累(进程、子进程、线程)
.note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...
随机推荐
- 使用ajax前必须了解的知识
ajax的全称: asynchronous javascript and xml (异步的javascript和xml) ajax不是某种编程语言 是一种在无需重新加载整个页面的情况下能够更新部分网页 ...
- CSS-给Font Awesome拓展Base64编码的图标
和 fa 一样设置到::before中就行了,不过 fa 是直接设置内容,这里用的背景图 .fa-science-garden::before { content: ""; dis ...
- xshell设置选中复制,右击粘贴功能
. 设置选中复制: 工具--->选项--->键盘和鼠标--->(然后根据下图设置保存即可) 2. 设置ctrl + v 粘贴功能: 工具--->选项--->键盘和鼠标-- ...
- APP运营怎么利用留存率等数据分析用户减少的原因?
APP运营怎么利用留存率等数据分析用户减少的原因? 数据分析最核心的方法是作比较,因为绝对的数值在大多数场合下是没有意义的,通过在不同维度之间做数据的比较分析,能帮助开发者找到数据变化的原因.举一个典 ...
- SQL 交叉连接与内连接
交叉连接 ,没有任何限制方式的连接. 叫做交叉连接. 碰到一种SQL 的写法. select * from t1,t2 . 这其实是交叉连接 . t1 是三条 , t2 是两条. ...
- Yahoo! 35条网站性能优化建议
Yahoo! 35条网站性能优化建议 Yahoo!的 Exceptional Performance团队为改善 Web性能带来最佳实践.他们为此进行了一系列的实验.开发了各种工具.写了大量的文章和博客 ...
- upc组队赛15 Lattice's basics in digital electronics【模拟】
Lattice's basics in digital electronics 题目链接 题目描述 LATTICE is learning Digital Electronic Technology. ...
- golang的数据类型之基本数据类型的默认值和转换
默认值: 整型的默认值:0 浮点型的默认值:0字符串的默认值:"" //空布尔类型的默认值:false package mainimport "fmt" f ...
- [fw]PAGE_SIZE & PAGE_SHIFT & _AC()
PAGE_SIZE & PAGE_SHIFT & _AC() 在大多系统下,PAGE_SIZE被定义为 4k 大小,即 4096 字节. 在 x86 系统里,PAGE_SIZE 和 P ...
- centons6升级gcc和glibc版本
一.先升级gcc 这里配置yum源来升级 centos6系列更换阿里yum源 1.首先备份原来的cent os官方yum源 cp /etc/yum.repos.d/CentOS-Base.repo / ...