图还未完成
来源:互联网 发布:中泰证券软件下载 编辑:程序博客网 时间:2024/05/19 10:53
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MaxInt 32767
#define MVNum 100
#define QueueSize 30
bool visited[MVNum];
typedef int status;
typedef char VerTexType;//假设定点的类型为整型
typedef int ArcType;//假设边的权值为整型
/*******************************************/
/*图的邻接矩阵表示 */
/*****************************************/
typedef struct
{
VerTexType vexs[MVNum]; //顶点表
ArcType arcs[MVNum][MVNum];//邻接矩阵
int vexnum,arcnum;
}AMGraph;
/*******************************************/
/*确定v在G中的位置 */
/*****************************************/
int LocateVex(AMGraph &G, VerTexType v)
{
int j=ERROR,k;
for( k=0; k<G.vexnum; ++k)
{
if(G.vexs[k]=v)
{
j=k;
break;
}
}
return(j);
}
/*****************************************/
/*采用邻接矩阵表示法,创建无向网G */
/***************************************/
status CreateUDN(AMGraph &G)
{
int i,j,k;
VerTexType v1,v2;
cin>>G.vexnum>>G.arcnum;
for(i=0; i<G.vexnum; ++i)
cin>>G.vexs[i];
for(i=0; i<G.vexnum; ++i)
for(j=0; j<G.vexnum; ++j)
G.arcs[i][j] = MaxInt;
for(k=0; k<G.arcnum; ++k)
{
cin>>v1>>v2;
i = LocateVex(G,v1);
j = LocateVex(G,v2);
G.arcs[i][j] = 1;
}
return OK;
}
//深度优先搜索遍历
void DFS_AM(AMGraph G, int v)
{
int w;
cout<<v;visited[v]=true;
for(w=0;w<G.vexnum;w++)
if((G.arcs[v][w]!=0)&&(!visited[w])) DFS_AM(G,w);
}
void DFSTraverse(AMGraph G)
{
int v;
for(v=0; v<G.vexnum; ++v) visited[v] = false;
for(v=0; v<G.vexnum; ++v)
if(!visited[v]) DFS_AM(G,v);
}
/************************************************************************/
/* 广度优先遍历(广度优先搜索) */
/************************************************************************/
typedef struct
{
int front;
int rear;
int count;
int data[QueueSize];
}CirQueue;
void InitQueue(CirQueue *Q) //创建队列
{
Q->front=Q->rear=0;
Q->count=0;
}
int QueueEmpty(CirQueue *Q)//判断队列是否为空
{
return Q->count=QueueSize;
}
int QueueFull(CirQueue *Q)
{
return Q->count==QueueSize;
}
void EnQueue(CirQueue *Q,int x) //插入
{
if (QueueFull(Q))
printf("Queue overflow");
else
{
Q->count++;
Q->data[Q->rear]=x;
Q->rear=(Q->rear+1)%QueueSize;
}
}
int DeQueue(CirQueue *Q) //删除
{
int temp;
if(QueueEmpty(Q))
{
printf("Queue underflow");
return NULL;
}
else
{
temp=Q->data[Q->front];
Q->count--;
Q->front=(Q->front+1)%QueueSize;
return temp;
}
}
void BFSM(AMGraph *G,int k)
{
int i,j;
CirQueue Q;
InitQueue(&Q);
printf("广度优先遍历结点: 结点%c /n",G->vexs[k]);
visited[k]=true;
EnQueue(&Q,k);
while (!QueueEmpty(&Q))
{
i=DeQueue(&Q);
for (j=0;j<G->vexnum;j++)
if(G->arcs[i][j]==1&&!visited[j])
{
printf("广度优先遍历结点:%c/n",G->vexs[j]);
visited[j]=true;
EnQueue(&Q,j);
}
}
}
void BFSTraverseM(AMGraph *G)
{
int i;
for (i=0;i<G->vexnum;i++)
visited[i]=false;
for (i=0;i<G->vexnum;i++)
if (!visited[i])
BFSM(G,i);
}
int main()
{
AMGraph A;
CreateUDN(A);
DFSTraverse(A);
BFSTraverseM(&A);
return 0;
}
#include<string.h>
#include<stdlib.h>
#include<iostream.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MaxInt 32767
#define MVNum 100
#define QueueSize 30
bool visited[MVNum];
typedef int status;
typedef char VerTexType;//假设定点的类型为整型
typedef int ArcType;//假设边的权值为整型
/*******************************************/
/*图的邻接矩阵表示 */
/*****************************************/
typedef struct
{
VerTexType vexs[MVNum]; //顶点表
ArcType arcs[MVNum][MVNum];//邻接矩阵
int vexnum,arcnum;
}AMGraph;
/*******************************************/
/*确定v在G中的位置 */
/*****************************************/
int LocateVex(AMGraph &G, VerTexType v)
{
int j=ERROR,k;
for( k=0; k<G.vexnum; ++k)
{
if(G.vexs[k]=v)
{
j=k;
break;
}
}
return(j);
}
/*****************************************/
/*采用邻接矩阵表示法,创建无向网G */
/***************************************/
status CreateUDN(AMGraph &G)
{
int i,j,k;
VerTexType v1,v2;
cin>>G.vexnum>>G.arcnum;
for(i=0; i<G.vexnum; ++i)
cin>>G.vexs[i];
for(i=0; i<G.vexnum; ++i)
for(j=0; j<G.vexnum; ++j)
G.arcs[i][j] = MaxInt;
for(k=0; k<G.arcnum; ++k)
{
cin>>v1>>v2;
i = LocateVex(G,v1);
j = LocateVex(G,v2);
G.arcs[i][j] = 1;
}
return OK;
}
//深度优先搜索遍历
void DFS_AM(AMGraph G, int v)
{
int w;
cout<<v;visited[v]=true;
for(w=0;w<G.vexnum;w++)
if((G.arcs[v][w]!=0)&&(!visited[w])) DFS_AM(G,w);
}
void DFSTraverse(AMGraph G)
{
int v;
for(v=0; v<G.vexnum; ++v) visited[v] = false;
for(v=0; v<G.vexnum; ++v)
if(!visited[v]) DFS_AM(G,v);
}
/************************************************************************/
/* 广度优先遍历(广度优先搜索) */
/************************************************************************/
typedef struct
{
int front;
int rear;
int count;
int data[QueueSize];
}CirQueue;
void InitQueue(CirQueue *Q) //创建队列
{
Q->front=Q->rear=0;
Q->count=0;
}
int QueueEmpty(CirQueue *Q)//判断队列是否为空
{
return Q->count=QueueSize;
}
int QueueFull(CirQueue *Q)
{
return Q->count==QueueSize;
}
void EnQueue(CirQueue *Q,int x) //插入
{
if (QueueFull(Q))
printf("Queue overflow");
else
{
Q->count++;
Q->data[Q->rear]=x;
Q->rear=(Q->rear+1)%QueueSize;
}
}
int DeQueue(CirQueue *Q) //删除
{
int temp;
if(QueueEmpty(Q))
{
printf("Queue underflow");
return NULL;
}
else
{
temp=Q->data[Q->front];
Q->count--;
Q->front=(Q->front+1)%QueueSize;
return temp;
}
}
void BFSM(AMGraph *G,int k)
{
int i,j;
CirQueue Q;
InitQueue(&Q);
printf("广度优先遍历结点: 结点%c /n",G->vexs[k]);
visited[k]=true;
EnQueue(&Q,k);
while (!QueueEmpty(&Q))
{
i=DeQueue(&Q);
for (j=0;j<G->vexnum;j++)
if(G->arcs[i][j]==1&&!visited[j])
{
printf("广度优先遍历结点:%c/n",G->vexs[j]);
visited[j]=true;
EnQueue(&Q,j);
}
}
}
void BFSTraverseM(AMGraph *G)
{
int i;
for (i=0;i<G->vexnum;i++)
visited[i]=false;
for (i=0;i<G->vexnum;i++)
if (!visited[i])
BFSM(G,i);
}
int main()
{
AMGraph A;
CreateUDN(A);
DFSTraverse(A);
BFSTraverseM(&A);
return 0;
}
0 0
- 图还未完成
- 还未完成的文字
- 2013还未完成的事
- 因式分解(数学)(未完成 还需完善)
- C#MyAccounting )课本P229~237页,还未完成
- 洗牌----网易有道2017内推编程题还未完成。
- 未完成
- 未完成
- 未完成
- 未完成
- 未完成
- 未完成
- 未完成
- 未完成
- 未完成
- 未完成
- 未完成
- 未完成
- 简单易懂的空间坐标索引1
- Button之setOnClickListener
- android屏幕适配,除了使用dp,还可以使用比例
- 【ITOO】NuGet发布类库包
- 网站漏洞检测工具
- 图还未完成
- iOS-Foundation框架(NSDate.h解读)
- iOS---UIWebView与JavaScript(JS) 回调交互
- opencv中感兴趣区域以及mask的使用
- 测试资源
- @SuppressLint("NewApi")和@TargetApi()的区别
- iOS9设计模式之工厂模式
- eclipse创建maven工程
- MySQL:按前缀批量删除表格