public class TestForString{
public static void main(String[] arg){

}

}

class StackX{
private final int SIZE = 20;
private int[] st;
private int top;

public StackX(){
    st = new int[SIZE];
    top = -1;
}

public void push(int j){
    st[++top]=j;
}

public int pop(){
    return st[top--];
}

public int peek(){
    return st[top];
}

public boolean isEmpty(){
    return top==-1;
}

}

class Vertex{
public char label;
public boolean wasVisited;

public Vertex(char lab){
    label = lab;
    wasVisited = false;
}

}

class Graph{
private final int MAX_VERTS = 20;
private int[][] adjMat;
private Vertex[] vertexList;
private int nVerts;
private StackX theStack;

public Graph(){
    nVerts = 0;
    vertexList = new Vertex[MAX_VERTS];
    adjMat = new int[MAX_VERTS][MAX_VERTS];
    for(int i=0;i<MAX_VERTS;i++){
        for(int j=0;j<MAX_VERTS;j++){
            adjMat[i][j]=0;
        }
    }
    theStack = new StackX();
}

public void addVertex(char lab){
    vertexList[nVerts++]=new Vertex(lab);
}



public void deleteVertex(int j){



    for(;j<nVerts-1;j++){
        vertexList[j]=vertexList[j+1];
    }
    moveColLeft(j);
    moveRowUp(j);
    nVerts--;

}

public void moveColLeft(int j){
    for(;j<nVerts-1;j++){
        for(int i=0;i<nVerts;i++){
            adjMat[i][j]=adjMat[i][j+1];
        }
    }
}

public void moveRowUp(int j){
    for(;j<nVerts-1;j++){
        adjMat[j]=adjMat[j+1];
    }
} 

public void addEdge(int start ,int end){
    adjMat[start][end] = 1;
    adjMat[end][start]=1;
}

public void displayVertex(int v){
    System.out.print(vertexList[v].label);
}

public void dfs(){
    vertexList[0].wasVisited=true;
    theStack.push(0);

    while(!theStack.isEmpty()){
        int current = theStack.peek();
        int i=0;
        for(;i<nVerts;i++){
            if(adjMat[current][i]==1&&vertexList[i].wasVisited==false){
                theStack.push(i);
                vertexList[i].wasVisited = true;
                displayVertex(i);
                break;
            }
        }
        if(i==nVerts){
            theStack.pop();
        }
    }
}

private static class Queue{
    int head;
    int tail;
    int num;
    int[] array;
    final static int MaxSize = 20;

    public Queue(){
        head = 0;
        tail = -1;
        num=0;
        array = new int[MaxSize];
    }

    public void offer(int j){
        if(num<MaxSize-1){
            tail++;
            tail%=MaxSize;
            array[tail]=j;
            num++;
        }
    }

    public int poll(){
        if(num>0){
            int temp = array[head++];
            num--;
            head%=MaxSize;
            return temp;
        }
        return -1;
    }

    public boolean isEmpty(){
        return num==0;
    }
}

public void bfs(){
    Queue queue = new Queue();
    queue.offer(0);
    vertexList[0].wasVisited = true;

    while(!queue.isEmpty()){
        int current = queue.poll();
        for(int i=0;i<nVerts;i++){
            if(adjMat[current][i]==1&&vertexList[i].wasVisited==false){
                queue.offer(i);
            }
        }
    }
}

public void topo(){
    int orig_nVerts = nVerts;
    char[] sortedArray = new char[nVerts];
    int indexOfSortedArray = 0;
    while(nVerts>0){
        int current = noSuccessor();
        if(current==-1){
            System.out.println("There must be a circle");
            return;
        }
        sortedArray[nVerts-1]=vertexList[current].label;
        deleteVertex(current);

    } 
}

private int noSuccessor() {
    // TODO Auto-generated method stub

    for(int i=0;i<nVerts;i++){
        int j=0;
        for(;j<nVerts;j++){
            if(adjMat[i][j]==1){
                break;
            }
        }
        if(j==nVerts){
            return i;
        }
    }
    return -1;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值