import java.util.Stack;
public class TopOrder {
static int num=0;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int graph[][] = {
{0,0,1,0,0,0},
{0,0,1,0,0,0},
{0,0,0,0,1,0},
{0,0,0,0,1,0},
{0,0,0,0,0,1},
{0,0,0,0,0,0}
};
int start = 0;
int n = graph.length;
int[] visited = new int[n];
Stack<Integer> stack = new Stack<Integer>();
for(int i=0;i<n;i++)
visited[i]=0;
int r[] = new int[n];
for(int i=0;i<n;i++)
{
if(visited[i]==0)
{
dfs(stack,graph,i,n,visited,r);
}
}
System.out.println();
for(int i=n-1;i>=0;i--)
System.out.print(r[i]+" ");
}
public static void dfs(Stack<Integer> stack,int array[][],int i,int n,int visited[],int[] r)
{
int k;
visited[i]=1;
stack.push(i);
System.out.print(i+" ");
if(stack.isEmpty())
return;
k = stack.pop();
for(int j=0;j<n;j++)
{
if(array[k][j]!=0&&visited[j]==0)
{
stack.push(j);
dfs(stack,array,j,n,visited,r);
}
}
r[num++]=i;
}
}
拓扑排序+DFS
最新推荐文章于 2022-04-18 20:45:56 发布