搜到一个代码 我尼玛 c语言 顿时感到从来没有的亲切
写着写着发现什么语言都看不懂啊 泪奔
如若有人看到此篇 教导一二 或仅留几句到此一游 我会尤为感激 代码没白抄
#include<stdio.h>
#include<string.h>
int n, st[110], top, G[110][110], vis[110];
void dfs(int u)
{
int v;
vis[u] = 1;
for(v = 1; v <= n; v++)
if(G[u][v] && !vis[v])
dfs(v);
st[--top] = u;
}
int main()
{
int i,j,k,m,a,b;
while(1)
{
scanf("%d%d", &n, &m);
if(n == 0)
break;
memset(G, 0, sizeof(G));
for(i=0; i <m; i++)
{
scanf("%d%d", &a, &b);
G[a][b] = 1;
}
memset(vis, 0, sizeof(vis));
top = n;
for(i=1; i <= n;i++)
if(!vis[i])
dfs(i);
for(i=0; i <n; i++)
{
if(i)
printf(" ");
printf("%d", st[i]);
}
printf("\n");
}
return 0;
}
下面是暴力的程序
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int edge[105][105];
int list[105];
int used[105];
int main()
{
int n,m,a,b;
while( scanf("%d%d", &n, &m) && n) {
for(int i = 1; i <= n; ++ i){
list[i] = 0;
used[i] = 0;
}
memset(edge, 0, sizeof(edge));
for(int i = 1; i <= m; ++i){
scanf("%d%d", &a, &b);
edge[a][b] = 1;
list[b] ++;
}
for(int i = 1; i <= n; ++i){
int now = 0;
for(int j = 1; j <= n; ++j)
if( !used[j] && !list[j]) {
used[j] = 1;
now = j; break;
}
for(int j =1; j <= n; ++j)
if(edge[now][j]) list[j]--;
printf("%d", now);
if( i < n ) printf(" ");
else printf("\n");
}
}
return 0;
}