📄 fxb.java
字号:
import java.io.*;
import java.util.*;
public class FXB{
/**
* @param args
*/
public static void main(String[] args) throws Exception
{
BufferedReader inStream=new BufferedReader(new FileReader("wen.txt"));
BufferedReader inStreamF=new BufferedReader(new FileReader("Follow.txt"));
OutputStream out=new FileOutputStream(new File("biao.txt"));
DataOutputStream dout=new DataOutputStream(out);
String lines;
String line;
lines="";
line=inStream.readLine();
while(line!=null)
{
String[] keys=line.split(" ");
lines+=keys[0]+" ";
for(int i=1;i<keys.length;i++)
lines+=keys[0].charAt(0)+"->"+keys[i]+" ";
line=inStream.readLine();
}
Global.Product=lines.split(" ");
line="";
for(int i=0;i< Global.Product.length;i++)
{
int a=0;
for(int j=0;j<line.length();j++)
if(line.charAt(j)== Global.Product[i].charAt(0))
a=1;
if(a==0)
line+= Global.Product[i].charAt(0)+" ";
}
Global.vN=line.split(" ");
line="";
for(int i=0;i< Global.Product.length;i++)
{
for(int j=3;j< Global.Product[i].length();j++)
{
int b=0;
for(int l=0;l< Global.vN.length;l++)
if( Global.vN[l].charAt(0)== Global.Product[i].charAt(j))
{
if(line.length()!=0)
if(line.charAt(line.length()-1)!=' ')
line+=" ";
b=1;
break;
}
if(b==0)
{
int a=0;
for(int k=0;k<line.length();k++)
if(line.charAt(k)== Global.Product[i].charAt(j))
a=1;
if(a==0)
line+= Global.Product[i].charAt(j);
}
}
if(line.length()!=0)
if(line.charAt(line.length()-1)!=' ')
line+=" ";
}
line+="#";
Global.vT=line.split(" ");
System.out.print("SLR(1)"+" "+'\t');
for(int i=0;i<Global.vT.length;i++)
System.out.print(Global.vT[i]+" "+'\t');
for(int i=0;i<Global.vN.length;i++)
System.out.print(Global.vN[i]+" "+'\t');
System.out.println();
Global.sum=1;
Global.slr=new Slr[50];
for(int i=0;i<50;i++)
Global.slr[i]=new Slr();
Global.slr[0].setc(0,3,-1);
Global.slr[0].extend();
pass(Global.slr[0]);
for(int i=1;i<Global.sum;i++)
{
Global.slr[i].extend();
pass(Global.slr[i]);
}
/*for(int i=0;i<Global.sum;i++)
{ System.out.println(i+" "+Global.slr[i].num+" "+Global.slr[i].cnum);
for(int j=0;j<Global.slr[i].num;j++)
System.out.println(Global.slr[i].chan[j]+" "+Global.slr[i].dian[j]+" "+Global.slr[i].next[j]);
System.out.println();
}*/
line="";
lines="";
line+=inStreamF.readLine();
while(line!=null)
{
lines+=line+":";
line=inStreamF.readLine();
}
inStream.close();
String[] Fw=lines.split(":");
int[][] slr=new int[Global.sum][Global.vT.length+Global.vN.length];
for(int i=0;i<Global.sum;i++)
for(int j=0;j<Global.vT.length+Global.vN.length;j++)
slr[i][j]=-1;
for(int i=0;i<Global.sum;i++)
{
for(int j=0;j<Global.slr[i].num;j++)
{
if(Global.slr[i].next[j]==-1)
{
int k,m,n=0;
for(k=0;k<Fw.length;k++)
if(Fw[k].charAt(0)==Global.Product[Global.slr[i].chan[j]].charAt(0))
break;
for(m=2;m<Fw[k].length();m++)
{
for(n=0;n<Global.vT.length;n++)
if(Fw[k].charAt(m)==Global.vT[n].charAt(0))
break;
slr[i][n]=100+Global.slr[i].chan[j];
}
}
else
{
for(int m=0;m<Global.vT.length;m++)
if(Global.vT[m].charAt(0)==Global.Product[Global.slr[i].chan[j]].charAt(Global.slr[i].dian[j]))
slr[i][m]=Global.slr[i].next[j];
for(int n=0;n<Global.vN.length;n++)
if(Global.vN[n].charAt(0)==Global.Product[Global.slr[i].chan[j]].charAt(Global.slr[i].dian[j]))
slr[i][n+Global.vT.length]=Global.slr[i].next[j];
}
}
}
dout.writeInt(Global.sum);
dout.writeInt(Global.vT.length+Global.vN.length);
for(int i=0;i<Global.sum;i++)
{
System.out.print(i+" "+'\t');
for(int j=0;j<Global.vT.length+Global.vN.length;j++)
{
System.out.print(slr[i][j]+" "+'\t');
dout.writeInt(slr[i][j]);
}
System.out.println();
}
dout.flush();
dout.close();
}
static void pass(Slr S)
{
int n=Global.sum;
for(int i=0;i<S.num;i++)
{
int j;
if(Global.Product[S.chan[i]].length()==S.dian[i])
{
S.next[i]=-1;
continue ;
}
for(j=0;j<i;j++)
{
if(Global.Product[S.chan[j]].length()!=S.dian[j]&&Global.Product[S.chan[i]].charAt(S.dian[i])==Global.Product[S.chan[j]].charAt(S.dian[j]))
{
S.next[i]=S.next[j];
Global.slr[S.next[j]].setc(S.chan[i], S.dian[i]+1,-1);
break;
}
}
if(i==j)
{
Global.slr[Global.sum]=new Slr();
Global.slr[Global.sum].setc(S.chan[i], S.dian[i]+1, -1);
S.next[i]=Global.sum;
Global.sum++;
}
}
for(int i=n;i<Global.sum;i++)
for(int j=0;j<n;j++)
{
if(bijiao(Global.slr[i],Global.slr[j]))
{
int k;
int lable=0;
for( k=0;k<S.num;k++)
{
if(S.next[k]==i)
{
S.next[k]=j;
lable=1;
}
else if(lable==1)
S.next[k]--;
}
for(int l=i;l<Global.sum-1;l++)
{
//System.out.println(Global.slr[l].chan[0]);
Global.slr[l]=Global.slr[l+1];
//System.out.println(Global.slr[l].chan[0]);
}
//System.out.println(Global.slr[i].chan[0]);
Global.sum--;
//i--;
}
}
}
static boolean bijiao(Slr S1,Slr S2)
{
int n=0;
if(S1.cnum!=S2.cnum)
return false;
for(int i=0;i<S1.cnum;i++)
for(int j=0;j<S2.cnum;j++)
if(S1.chan[i]==S2.chan[j]&&S1.dian[i]==S2.dian[j])
n++;
if(S1.cnum==n)
return true;
else
return false;
}
}
class Slr
{
public int chan[];
public int dian[];
public int next[];
public int num;
public int cnum;
public Slr()
{
chan=new int[50];
dian=new int[50];
next=new int[50];
num=0;
cnum=0;
}
public void set(int c,int d,int n)
{
chan[num]=c;
dian[num]=d;
next[num]=n;
num++;
}
public void setc(int c,int d,int n)
{
chan[num]=c;
dian[num]=d;
next[num]=n;
num++;
cnum++;
}
public void extend()
{
for(int i=0;i<num;i++)
{
if(Global.Product[chan[i]].length()==dian[i])
break;
int j=0;
for(j=0;j<num;j++)
if(Global.Product[chan[i]].charAt(dian[i])==Global.Product[chan[j]].charAt(0)&&dian[j]==3)
break;
if(j==num)
for(int k=0;k<Global.Product.length;k++)
if(Global.Product[k].charAt(0)==Global.Product[chan[i]].charAt(dian[i]))
set(k,3,-1);
}
}
}
class Global
{
public static String[] Product;
public static String[] vN;
public static String[] vT;
public static Slr[] slr;
public static int sum;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -