图拓扑编程
㈠ 急急急~~~数据结构,编写函数实现图的拓扑排序
#include<stdio.h>
#include<string.h>
#define M 30
int a[M][M],n;
void topo()
{
	int i,j,x;
	int in[M],ans[M],an;//统计入度,最后答案,答案尺寸
	int q[M],qh,qt;//0入度点的队列
	memset(in,0,sizeof(in));
	an=0;
	//统计入度
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			if(a[i][j]!=0)//假定a[i][j]=0为无边相连
				in[j]++;
		}
	}
	//入度为0的点先入队
	qh=0;qt=0;
	for(i=0;i<n;i++)
	{
		if(in[i]==0)
		{
			q[qt]=i;
			qt++;
		}
	}
	//拓扑
	for(i=0;i<n;i++)
	{
		if(qh==qt)//队列为空,说明剩余点都不是入度为0的点
			break;
		x=q[qh];qh++;//取队头
		ans[an]=x;an++;//记录答案
		for(j=0;j<n;j++)
		{
			if(a[x][j]!=0)//该点指向的边都减去一个入度
			{
				in[j]--;
				if(in[j]==0)//入队
				{
					q[qt]=j;
					qt++;
				}
			}
		}
	}
	if(an<n)//答案没有取所有点,说明没有拓扑序
		printf("unsolve\n");
	else
	{
		for(i=0;i<an;i++)
			printf("%d ",ans[i]);
		printf("\n");
	}
}
void main()
{
	int i,j;
	memset(a,0,sizeof(a));
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	topo();
}
应该大概就这样。。。
请根据实际情况修改main函数,或将全局变量处理一下。。。
㈡ 求网络拓扑图的详细编址!@@如图!!
我不知道你是要分配IP地址还是要干什么,直接在路由器上分不就行了,
QQ:165444871
是打发
㈣ c语言编程 拓扑算法
i=0
A[1...n]为一个新数组
循环
      寻找入度为零的点,将该点放到位置A[i]中
      i=i+1
      将该点出边删除
输出A
㈤ 拓扑关系怎样在编程中表示
要选择数据结构哦,
用树或者图储存,各个点的坐标就可以,参考书上有例子的
㈥ c++ 编程 拓扑结构
网状结构最简单的可以使用二维数组实现。比如:
int g[5][5];可以表示一个有5个节点的图。其中,g[i][j]可以表示节点i和节点j之间的距离(或者从i到j的费用,节点i到j之间断路的概率,等等)
㈦ 编程实现图的拓扑排序算法
typedef struct node
{
 int adjvex;
 struct node *next;
}edgenode;
typedef struct  
{
 int vertex;
 int id;
 edgenode *link;
}vexnode;
vexnode dig[n];
void topsort(vexnode dig[])
{
 int i,j,k,m=0,top=-1;
 edgenode *p;
 for(i=0;i<n;i++)
  if(dig[i].id==0)
  {
   dig[i].id=top;
   top=i;
  }
 while(top!=-1)
 {
  j=top;
  top=dig[top].id;
  cout<<dig[j].vertex+1<<"\t";
  m++;
  p=dig[j].link;
  while(p)
  {
   k=p->adjvex;
   dig[k].id--;
   if(dig[k].id==0)
   {
    dig[k].id=top;
    top=k;
   }
   p=p->next;
  }
 }
 if(m<n)
  cout<<"The network has a cycle.."<<endl;
}
这个是用栈实现的一个算法,你看下吧
