📄 frame1.java
字号:
grpCopy[vertex1][i]=0;
grpCopy[i][vertex1]=0;
}
//去掉vertex1后,继续递归
if(s==1){
for(i=0;i<vertexNum;i++){
if(grp[vertex1][i]==0)
{ }
else if(dfs(i,vertex2,grpCopy,lj,out)==false)
{ }
else {
p=true;
}//else
}//for
}//if
return p;
}
}
class Lines {
private int lineNum;
private int line[][]=new int[1000][3];
public Lines(int aline[][],int alineNum){
lineNum=alineNum;
for(int i=0;i<lineNum;i++){
line[i][0]=aline[i][0];
line[i][1]=aline[i][1];
line[i][2]=aline[i][2];
}
}
public int[][] getLines(){
return line;
}
public int getLineNum(){
return lineNum;
}
}
class A {
private int a[][]=new int[1000][1000];
private int verNum;//表示列数
private int horNum;//表示行数
private int xynum;
private int[] xy=new int[1000];
public A(TraffMap traffMap,Lines lines){
//将文件中的路径写入节点
Node1 list1=new Node1();
Node2 list2=new Node2();
Node3 list3=new Node3();
int graph[][];
int vertexNum;
int aline[][];
int lineNum;
//int freeNode1;
int header1=0,header2=0;//指向list1,list2,list3的头指针
int header3=0;
int pointer1=0,pointer2=0,pointer3=0;//用于指向list1,list2,list3的指针
int verNumCopy=-1;//用于控制给a[][]赋值
int horNumCopy=-1;
int [][] graphCopy=new int[1000][1000];//用于给a的每列赋值
int flux=-1;
graph=traffMap.getTraffMap();
vertexNum=traffMap.getVertexNum();
aline=lines.getLines();
lineNum=lines.getLineNum();
for(int i=0;i<vertexNum;i++)
for(int j=0;j<vertexNum;j++)
graphCopy[i][j]=0;//如果graphCopy[i][j]为1表示经过graphCopy[i][j]
verNum=0;//给类属性初始化
horNum=0;
try {
BufferedReader in = new BufferedReader(new
FileReader("a.dat"));
readData1(in,list1,list2,list3);
in.close();
} catch (IOException exception){ }
//初始化xy[];
int xyhor=0;
int xyver=0;
pointer1=header1;
while( pointer1!=-1){
pointer2=list1.hornext[pointer1];
while(pointer2!=-1){
xyver++;//列数
pointer2=list2.hornext[pointer2];
}//list2
xy[xyhor]=xyver;
xyver=0;
xyhor++;
pointer1=list1.vernext[pointer1];
}//list1
xynum=xyhor;
//给horNum赋值
for(int i=0;i<vertexNum;i++)
for(int j=0;j<vertexNum;j++)
if(graph[i][j]>0)horNum++;//行数
//给verNum赋值
pointer1=header1;
while( pointer1!=-1){
pointer2=list1.hornext[pointer1];
while(pointer2!=-1){
verNum++;//列数
pointer2=list2.hornext[pointer2];
}//list2
pointer1=list1.vernext[pointer1];
}//list1
//给a[][]赋值
for (int i=0;i<horNum;i++)
for(int j=0;j<verNum;j++)
a[i][j]=0;
pointer1=header1;
while( pointer1!=-1){
flux++;
pointer2=list1.hornext[pointer1];
while(pointer2!=-1){
pointer3=list2.vernext[pointer2];
int s,d;
verNumCopy++;
s=list2.point[pointer2];
d=list3.point[pointer3];
graphCopy[s][d]=graph[s][d];
int f=graph[s][d];
pointer3=list3.vernext[pointer3];
while(pointer3!=-1){
s=d;
d=list3.point[pointer3];
graphCopy[s][d]=graph[s][d];
pointer3=list3.vernext[pointer3];
}
for(int i=0;i<vertexNum;i++)
for(int j=0;j<vertexNum;j++)
{
if(graph[i][j]>0)
{
horNumCopy++;
if(graphCopy[i][j]>0){a[horNumCopy][verNumCopy]=aline[flux][2];
}
}
}
for(int i=0;i<vertexNum;i++)
for(int j=0;j<vertexNum;j++)
graphCopy[i][j]=0;
horNumCopy=-1;
pointer2=list2.hornext[pointer2];
}//list2
pointer1=list1.vernext[pointer1];
}//list1
}
public int [][] getA(){
return a;
}
public int getVerNum(){
return verNum;
}
public int getHorNum(){
return horNum;
}
public int[] getXy(){
return xy;
}
public int getXynum(){
return xynum;
}
private void readData1(BufferedReader in,Node1 list1,Node2 list2,Node3 list3) throws IOException
{
int freeNode;
String name,st;
int s,d;
while(true){
st = in.readLine();
if(st.equals("over")) return;
StringTokenizer t = new StringTokenizer(st, "-");
name=t.nextToken();
s=Integer.parseInt(name);
name=t.nextToken();
d=Integer.parseInt(name);
freeNode=list1.FindFree();
list1.Create(0,freeNode,s,d);
readData2(in,freeNode,list1,list2,list3,0);
}//while
}
private void readData2(BufferedReader in,int freeNode,Node1 list1,Node2 list2,Node3 list3,int w) throws IOException
{
//w用于控制第一次操作
int header2=0;
int header3=0;
int freeNode1;
String name,st;
int s;
int v=0;
int pointer2;
while(true){
if(w==0){
st=in.readLine();
if(st.equals(""))return;
freeNode1=list2.FindFree();
list1.hornext[freeNode]=freeNode1;
header2=freeNode1;
StringTokenizer t = new StringTokenizer(st, "|");
name = t.nextToken();
s=Integer.parseInt(name);
list2.Create(freeNode1,freeNode1,s);
w=1;
v=0;
while(t.hasMoreTokens()){
if(v==0){
name = t.nextToken();
s=Integer.parseInt(name);
freeNode1=list3.FindFree();
list2.vernext[header2]=freeNode1;
header3=freeNode1;
list3.Create(header3,freeNode1,s);
v=1;
}
else {
name = t.nextToken();
s=Integer.parseInt(name);
freeNode1=list3.FindFree();
list3.Create(header3,freeNode1,s);
}
}//while(t.hasMoreTokens())
}//if(w==0)
else{
st = in.readLine();
if(st.equals(""))return;
StringTokenizer t = new StringTokenizer(st, "|");
name = t.nextToken();
s=Integer.parseInt(name);
freeNode1=list2.FindFree();
pointer2=freeNode1;
list2.Create(header2,freeNode1,s);
v=0;
while(t.hasMoreTokens()){
if(v==0){
name = t.nextToken();
s=Integer.parseInt(name);
freeNode1=list3.FindFree();
list2.vernext[pointer2]=freeNode1;
header3=freeNode1;
list3.Create(header3,freeNode1,s);
v=1;
}
else {
name = t.nextToken();
s=Integer.parseInt(name);
freeNode1=list3.FindFree();
list3.Create(header3,freeNode1,s);
}
}//while(t.hasMoreTokens())
}//else
}//while(true)
}
}
class Node1{
int maxLength=100;
int start[]=new int[maxLength];
int destination[]=new int [maxLength];
int vernext[]=new int [maxLength];
int hornext[]=new int[maxLength];
public Node1(){
for(int i=0;i<maxLength;i++){
vernext[i]=-2;hornext[i]=-1;
}
}
public int FindFree(){
int i;
for(i=0;i<maxLength;i++)
if(vernext[i]==-2)break;
return i;
}
public void Create(int header,int freeNode,int sou,int des){
int pointer;
if(header==freeNode){
start[header]=sou;
destination[header]=des;
vernext[header]=-1;}
else{
pointer=header;
start[freeNode]=sou;
destination[freeNode]=des;
vernext[freeNode]=-1;
while(vernext[pointer]!=-1)pointer=vernext[pointer];
vernext[pointer]=freeNode;
}
}
}
class Node2{
int maxLength=200;
int point[]=new int [maxLength];
int hornext[]=new int [maxLength];
int vernext[]=new int[maxLength];
public Node2(){
for(int i=0;i<maxLength;i++){
hornext[i]=-2;vernext[i]=-1;
}
}
public int FindFree(){
int i;
for(i=0;i<maxLength;i++)
if(hornext[i]==-2)break;
return i;
}
public void Create(int header,int freeNode,int poi){
int pointer;
if(header==freeNode){
point[header]=poi;
hornext[header]=-1;}
else{
pointer=header;
point[freeNode]=poi;
hornext[freeNode]=-1;
while(hornext[pointer]!=-1)pointer=hornext[pointer];
hornext[pointer]=freeNode;
}
}
}
class Node3{
int maxLength=400;
int point[]=new int [maxLength];
int vernext[]=new int[maxLength];
public Node3(){
for(int i=0;i<maxLength;i++){
vernext[i]=-2;
}
}
public int FindFree(){
int i;
for(i=0;i<maxLength;i++)
if(vernext[i]==-2)break;
return i;
}
public void Create(int header,int freeNode,int poi){//追加节点
int pointer;
if(header==freeNode){
point[header]=poi;
vernext[header]=-1;}
else{
pointer=header;
point[freeNode]=poi;
vernext[freeNode]=-1;
while(vernext[pointer]!=-1)pointer=vernext[pointer];
vernext[pointer]=freeNode;
}
}
public void PrintList(int header){
int pointer;
pointer=header;
while(pointer!=-1){
System.out.print("["+point[pointer]);
pointer=vernext[pointer];
}
System.out.println("");
}
}
class Matrix {
public static int[] convert(int[] xx,int[] xy,int length){
int i=0,j=0;
int n=0;
int m=0;
for(i=0;i<length;i++)
m=m+xy[i];
int [] z=new int[m];
for(i=0;i<length;i++){
j=n+xx[i];
n=n+xy[i];
z[j]=1;
}
return z;
}
public static int[] contraConvert(int[] x,int[] xy,int length){
int i=0,j=0;
int n=0,ncopy=0;
int m=0;
for(i=0;i<length;i++)
m=m+xy[i];
int [] z=new int[length];
for(i=0;i<length;i++)
z[i]=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -