⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 graphlink.h

📁 关于图的一些基本操作
💻 H
字号:

#include <iostream.h>
const int Vnum = 20 ;
typedef struct arcnode {
  int adjvex;
  struct arcnode * nextarc;
} arcnode;
 
typedef struct vexnode {
      int vertex;
      arcnode * firstarc;
}  adjlist[Vnum];

typedef struct graph
{ 
    adjlist adjlist;//问题
    int vexnum,arcnum;
} graphics;

void create(graphics *g)
{
   int n,e,i,j,k;
   arcnode *p;
   cout<<"创建一个图\t"<<endl;
   cout<<"输入顶点数"<<endl;
   cin>>n;
   cout<<"边数"<<endl;
   cin>>e;
   g->vexnum=n;
   g->arcnum=e;
   for (i=0;i<n;i++){
      g->adjlist[i].vertex=i;
      g->adjlist[i].firstarc=NULL;
   }
   for(k=0;k<n;k++){
     cout<<"第"<<k+1<<"条边(结点号从0到"<<n-1<<"):";
     cin>>i>>j;
     p=new arcnode;
     p->adjvex=j;
     p->nextarc=g->adjlist[i].firstarc;
     g->adjlist[i].firstarc=p;
    }
}

void disp( graphics *g){
   int i,have;
   arcnode *p;
   cout<<"输出图:"<<endl;
   for (i=0;i<g->vexnum;i++)
   { 
     p=g->adjlist[i].firstarc;
     have=0;
     while(p!=NULL)
     {
       cout<<"("<<i<<","<<p->adjvex<<"):";
       p=p->nextarc;
       have=1;
     }
    if(have==1)
     cout<<endl;
   }
}

void dfs(graphics g,int v,int visited[])
{
    arcnode *p;
    cout<<v<<" ";
    visited[v]=1;
    p=g.adjlist[v].firstarc;
    while(p!=NULL)
    {
       if(!visited[p->adjvex])
        dfs(g,p->adjvex,visited);
     p=p->nextarc;
    }
}

void bfs(graphics g,int v)
{
    int  queue[Vnum],rear=0,front=0;
    int visited[Vnum],i;
    arcnode *p;
    for( i=0;i<Vnum;i++)
          visited[i]=0;
    cout<<v<< " ";
    visited[v]=1;
    rear++;
    queue[rear]=v;
    while(rear!=front)
    {
      front++;
      v=queue[front];
      p=g.adjlist[v].firstarc;
      while(p!=NULL)
      {
         if(!visited[p->adjvex])
         {
            cout<<p->adjvex<< " " ;
            visited[p->adjvex]=1;
            rear++;
            queue[rear]=p->adjvex;
         }
       p=p->nextarc;
      }
    }
}
 
graphics creatdg()

{
  int n=4,e=6,i,j,k;
  graphics g;
  arcnode *p;
  int edge[][2]={{0,3},{0,1},{1,2},{1,0},{2,3},{2,0}};
  g.vexnum=n;
  g.arcnum=e;
  for (i=0;i<n;i++)
   {
    g.adjlist[i].vertex=i;
    g.adjlist[i].firstarc=NULL;
   }
 for (k=0;k<e;k++)
   {
    i=edge[k][0];
    j=edge[k][1];
    p=new arcnode;
    p->adjvex=j;
    p->nextarc=g.adjlist[i].firstarc;
    g.adjlist[i].firstarc=p;
   }
  return g;
}

graphics creatng()
{
  int n=4,e=10,i,j,k;
  graphics g;
  arcnode *p;
  int edge[][2]={{0,3},{3,0},{0,1},{1,0},{1,2},{2,1},{2,3},{3,2},{0,2},{2,0}};
  g.vexnum=n;
  g.arcnum=e;
  for (i=0;i<n;i++)
   {
    g.adjlist[i].vertex=i;
    g.adjlist[i].firstarc=NULL;
   }
 for (k=0;k<e;k++)
   {
    i=edge[k][0];
    j=edge[k][1];
    p=new arcnode;
    p->adjvex=j;
    p->nextarc=g.adjlist[i].firstarc;
    g.adjlist[i].firstarc=p;
   }
  return g;
}
int shortdjs()
{
	int s[MAX];
	int mindis,dis,i,j,u;

	for(i=0;i<M;i++)
	{
		dist[i]=cost[v0][i];
		path[i].pnode[0]=v0;
		path[i].num=0;
		s[i]=0;
	}
	s[v0]=1;
	for(i=1;i<M;i++)
	{
		mindis=up;
		u=0;
		for(j=0;j<M;j++)
			if(s[j]==0 && dist[j]<=mindis)
			{
				u=j;
				mindis=dist[j];
			};
		s[u]=1;
		for(j=0;j<M;j++)
			if(s[j]==0)
			{
				dis=dist[u]+cost[u][j];
				if(dist[j]>dis)
				{
					dist[j]=dis;
					path[j].num++;
					path[j].pnode[path[j].num]=u;
				}
			};
		path[i].num++;
		path[i].pnode[path[i].num]=i;
	}
	for(i=0;i<M;i++)
	{
		printf("%d ",dist[i]);
	}
	for(i=0;i<M;i++)
	{
		printf("%d ",path[v1].pnode[i]);
	}
	getchar();
	return path[v1].num;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -