给出胜负关系,要求确定名次
本来就是冲着学写邻接表什么的去的。。
拓扑排序呢,就是确定次序的东西啦,一般似乎用入度表达,前一个点访问过了,就把它指过的点的入度减掉
第一个是邻接矩阵的,已经详细注解啦,第二份留下来观摩大神的邻接表,附上~
邻接矩阵:
#include <stdio.h>
#include <string.h>
using namespace std;
const int MAXN=505;
int map[MAXN][MAXN],n,m,a,b,in[MAXN],ans[MAXN];
void topo()//本来写了三层套着的循环。。。看这里http://blog.csdn.net/swm8023/article/details/6770700
{
int cnt=1,j;
memset(ans,0,sizeof ans);
while(true){
for(j=1;j<=n;j++)
if(in[j]==0)//找到入度为0的j
break;
if(j==n+1)//最后j还加了一下,返回的
return;
in[j]=-1;//这个点下次不会再进来了
ans[cnt++]=j;//把j存进去
for(int k=1;k<=n;k++)
if(map[j][k]==1)//因为j已经存进去了,所以那些可以被j打败的,入度-1
in[k]--;
}
}
int main(){
wh