资源简介
2. 对矩阵表示的无向图,判断其是否存在欧拉通路,并且判断其是否欧拉图。如果是欧拉图,则至少找出一条欧拉回路。
代码片段和文件信息
/*
Author:lxrmido
Website:buzhuanggeek.com
Edit:GVIM_073
Date:2011/09/11
*/
import javax.swing.*;
import java.util.regex.Pattern;
class hw_14_2{
private static boolean points[][];
private static int nop;
private static int stack[];
private static int cur_sp = 0;
private static StringBuilder route = new StringBuilder();
private static StringBuilder routem = new StringBuilder();
private static void push(int elem){
stack[cur_sp++] = elem;
}
private static int pop(){
return stack[--cur_sp];
}
private static boolean exist(int elem){
for(int i = 0; i < cur_sp; i++){
if(stack[i] == elem)
return true;
}
return false;
}
private static void trace(int cp){
push(cp);
boolean zombie = true;
boolean mesh = false;
for(int i = 0; i < nop; i ++){
if(points[cp][i] == true){
if(!exist(i)){
zombie = false;
trace(i);
}else if(i == stack[0]){
mesh = true;
}
}
}
if(zombie && cur_sp == nop){
if(mesh){
push(stack[0]);
addRoute(routem);
pop();
}else{
addRoute(route);
}
}
pop();
}
private static void addRoute(StringBuilder Route){
StringBuilder tmprt = new StringBuilder();
for(int i = cur_sp-1; i >= 0; i--){
tmprt.append(stack[i]);
if(i != 0)
tmprt.append(“-“);
}
tmprt.append(“\n“);
if(Route.indexOf(tmprt.toString()) < 0){
for(int i = 0; i < cur_sp; i++){
Route.append(stack[i]);
if(i != cur_sp-1)
Route.append(“-“);
}
Route.append(“\n“);
}
}
public static void main(String[] args){
String tmp = JOptionPane.showInputDialog(null “请输入无向图的结点数:“);
while(!(tmp.matches(“\\d+“))){
tmp = JOptionPane.showInputDialog(null “输入有误,请重新输入有向图的结点数:“);
}
nop = Integer.parseInt(tmp);
if(nop == 1){
JOptionPane.showMessageDialog(null “结点数为1,故此图为欧拉图,欧拉通路、回路均为 0 。“);
System.exit(0);
}
points = new boolean[nop][nop];
stack = new int[nop*2];
String tmpary[];
while((tmp = JOptionPane.showInputDialog(null “请输入无向路径,结点以数字表示以任意符号或空格分隔(如 0-1-2-3不再输入点取消:“)) != null){
boolean eftv = true;
if(!(tmp.matches(“\\d.*“))){
JOptionPane.showMessageDialog(null “含有不存在的结点,本路径无效!“);
continue;
}
Pattern p = Pattern.compile(“\\D+“);
tmpary = p.split(tmp);
for(int i = 0; i < tmpary.length; i ++){
if(Integer.parseInt(tmpary[i]) >= nop){
JOptionPane.showMessageDialog(null “含有不存在的结点,本路径无效!“);
eftv = false;
break;
}
}
if(!eftv){
eftv = true;
continue;
}
for(int i = 0; i < tmpary.length-1; i ++){
points[Integer.parseInt(tmpary[i])][Integer.parseInt(tmpary[i+1])] = true;
}
}
stack= new int[nop*2];
for(int i = 0; i < nop; i++){
push(i);
for(int j = 0; j < nop; j++){
if(points[i][j] == true){
trace(j);
}
}
pop();
}
if(route.length() > 1){
JOptionPane.showMessageDialog(null “所有欧拉通路(不含回路)为:\n“+route);
if
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3403 2011-09-23 22:31 2\hw_14_2.class
文件 3418 2011-09-11 18:39 2\hw_14_2.java
目录 0 2011-09-23 22:30 2
----------- --------- ---------- ----- ----
6821 3
相关资源
- JAVA写的界面相对华丽的扫雷游戏
- java读取写入txt文件
- OutOfMemoryError_8种典型案例分享
- JAVA经典算法90题
- mysql-connector-java-5.1.30-bin.jar
- 采用java操作neo4j数据库源码
- java操作考勤机完整版代码
- OATH标准OTP算法
- Java打飞机游戏源码+论文
- 图书管理系统java课程设计报告.
- java 图形界面 排序小应用
- JAVA—comm.jar串口通信包
- 尚硅谷java核心技术教程.txt
- java实现基于SMO算法的SVM分类器
- java实现基于ID3算法的决策树分类器
- JAVA操作注册表的JNI库和JAR包jRegistry
- 相似图片搜索原理 Java实现源码
- Java实现的借贷管理源代码
- Java图形用户界面通讯录
- 小小工具箱-备忘录,日历,倒计时
- Android Socket源码实现与PC通讯
- Android手机版Java五子棋源代码
- java从入门到精通第三版光盘明日科技
- Java 课程表管理系统
- jsp上传头像
- 传智播客20套java项目高清视频完整源
- 房屋租赁系统
- 根据GoogleMapApi给出地名获取经纬度,
- 小学生数学测试软件Java编写
- 网络课程设计 Java五子棋网络版
评论
共有 条评论