贪心算法实例:安排会场(Java实现)

//读取文件里的活动场次和各个活动的时间

//用贪心算法做出适当的安排,以使用最少的会场安排最多的活动

/*********************greedyselect***************************************/

import java.io.*;
public class GreedySelect
{
public GreedySelect(String file)throws IOException//输入文件里的场次和时间
{
try
{
FileReader infile=new FileReader(file);
BufferedReader inBuffer=new BufferedReader(infile);
String s=inBuffer.readLine();
num=Integer.parseInt(s);
s=inBuffer.readLine();
int i=0;
acts=new Activity[num];

while(s!=null)
{
acts[i]=new Activity();
String[] time=new String[3];
time=s.split("//s");
acts[i].start=Integer.parseInt(time[0]);
acts[i].over=Integer.parseInt(time[1]);
acts[i].index=i;
s=inBuffer.readLine();
i++;
}

inBuffer.close();
}
catch(IOException e)
{
e.printStackTrace();
}

}

public void Sort()//按结束时间非递减排序
{
for(int i=0;i<num;i++)
{
int k=i;
for(int j=i+1;j<num;j++)
if(acts[j].over<acts[k].over) k=j;
Activity actTemp=new Activity();
if(i!=k)
{
actTemp=acts[i];
acts[i]=acts[k];
acts[k]=actTemp;
}
}
}
public void display()
{
for(int i=0;i<num;i++)
{
System.out.println(acts[i]);
}
}
public void greedySelect()//贪心选择,核心代码
{
int group=0;

for(int i=0;i<num&&(!acts[i].arrange);i++)
{

acts[i].arrange=true;
acts[i].group=group;
for(int j=1;(j<num)&&(!acts[j].arrange);j++)
{
int k=i;
if(acts[j].start>=acts[k].over)
{

acts[j].group=group;
acts[j].arrange=true;
k=j;
}
}
group++;
}


}
public void saveFile()throws IOException//保存安排结果到新文件
{
try
{
FileWriter saveFile=new FileWriter("C://Documents and Settings//Administrator//桌面//活动.txt");
PrintWriter saveF=new PrintWriter(saveFile);
for(int i=0;i<num;i++)
{
saveF.println(acts[i]);
}
saveF.close();
}
catch(IOException e)
{
e.printStackTrace();
}
}
private Activity[] acts;
private int num;

private class Activity//定义活动类
{
public Activity()
{
arrange=false;
}
public String toString()
{
return ("分组:"+group+"活动编号:"+index+"开始时间:"+start+" 结束时间"+over);
}
public int start;
public int over;
public int index;
public int group;
public boolean arrange;
}
}

你可能感兴趣的:(java实现)