Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Override
- public boolean kTraCTEuler() {
- if(isConnection()==false||adj.length<=1)
- return false;
- for(int i = 0; i<adj.length;i++) {
- if((degreeOvertex(i)%2)!=0)
- return false;
- }
- return true;
- }
- // xuất ra chu trình euler của đồ thị nếu có
- @Override
- public ArrayList<Integer> xuatCTrinhEuler(int start) {
- ArrayList<Integer> result = new ArrayList<>();
- if (kTraCTEuler()) {
- int[][] arrCopy = saoMang(adj);
- Stack<Integer> stack = new Stack<>();
- stack.push(start);
- ArrayList<Integer> listVisit = new ArrayList<>();
- while (!stack.isEmpty()) {
- int v = stack.peek();
- boolean found = false;
- for (int i = 0; i < arrCopy.length; i++) {
- if ((arrCopy[v][i] > 0)) {
- found = true;
- stack.push(i);
- arrCopy[v][i]--;
- arrCopy[i][v]--;
- break;
- }
- }
- if (found == false) {
- // int vertex = stack.pop();
- listVisit.add(stack.pop());
- }
- }
- // đảo ngược listVisit lại vì pop từ stack.
- for (int i = listVisit.size() - 1; i >= 0; i--) {
- result.add(listVisit.get(i));
- }
- return result;
- }
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement