圖拓撲編程
㈠ 急急急~~~數據結構,編寫函數實現圖的拓撲排序
#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;
}
這個是用棧實現的一個演算法,你看下吧
