#include int main(){ int i, j, p=0; char graph[10][10]={{0,1,0,0,0,0,0,0,0,0}, {0,0,1,0,0,0,0,0,0,0}, {0,0,0,0,1,1,0,0,0,0}, {0,0,0,0,0,1,0,0,0,0}, {0,0,0,0,0,0,1,0,0,0}, {0,0,0,0,0,0,0,1,0,0}, {0,0,0,0,0,0,0,0,1,0}, {0,0,0,0,0,0,0,0,1,0}, {0,0,0,0,0,0,0,0,0,1}, {0,0,0,0,0,0,0,0,0,0}}; int judge[10]={0};//辅助数组 int path[10];//路径数组 int flag=1; while(flag != 0) { flag = 0; for(j=0;j<10;j++) { //如果没有找过, if(judge[j]!=-1) { judge[j]=0; for(i=0;i<10;i++) { //将j列的所有元素之和赋给judge[j] judge[j]=judge[j]+graph[i][j]; } } } for(i=0;i<10;i++) { //如够judge[i],也就是该列元素之和为0 //则该节点为根节点,并存放到path[]数组中,p后移 if(judge[i]==0) { path[p]=i; p++; //将列中有1的元素置为0; for(int q=0;q<10;q++) graph[i][q]=0; judge[i]=-1;//是否已经找过 } } for(i=0;i<10;i++) { //如果没有找过,将flag赋值为1,重新查找 if(judge[i]!=-1) { flag = 1; } } } printf("p关键路径为:"); for(i=0;i<10;i++) { printf("%4d",path[i]); } printf("\n"); return 0; }