package 贪心算法;
//贪婪算法活动安排问题
import java.util.Scanner;
public class Makui {
public static void main(String[] args) {
// TODO Auto-generated method stub
int b[]= new int[11];//b[]记录起始时间
int a[]= new int[11];//a[]记录终止时间
boolean c[]=new boolean[11];
System.out.println("请输入各个活动的开始时间");
for(int s=0;s<11;s++){
System.out.print("活动"+(s+1)+":");
Scanner st=new Scanner(System.in);
b[s]=st.nextInt();//b[]记录起始时间
}
System.out.println("请输入各个活动的结束时间");
for(int i=0;i<11;i++){
System.out.print("活动"+(i+1)+":");
Scanner sc=new Scanner(System.in);
a[i]=sc.nextInt();//a[]记录终止时间
}
for(int x=0;x<a.length-1;x++){//交换法对a[]终止时间进行排序
for(int y=x+1;y<a.length;y++){
if(a[y]<a[x]){
int temp;
temp=a[y];
a[y]=a[x];
a[x]=temp;
}
}
}
greedySelector(b,a,c);
}
private static void greedySelector(int[] s, int[] f,boolean []a) {
// TODO Auto-generated method stub
int n=s.length;
a[0]=true;
int j=0;
int count=1;
for(int i=1;i<n;i++){
if(s[i]>=f[j]){//相容活动的条件是前一个活动的结束时间小于或等于后一个活动的开始时间
a[i]=true;//该活动与其他活动存在相容关系,则记录为真
j=i;//活动序号变更,寻找下一个相容活动
count++;
}
else a[i]=false;
}
System.out.println("相容活动数量最大值:"+count);
System.out.print("相容活动分别为:");
for(int k=0;k<s.length;k++){
if(a[k]==true){
System.out.print("活动"+(k+1)+" ");
}
}
}
//贪婪算法活动安排问题
import java.util.Scanner;
public class Makui {
public static void main(String[] args) {
// TODO Auto-generated method stub
int b[]= new int[11];//b[]记录起始时间
int a[]= new int[11];//a[]记录终止时间
boolean c[]=new boolean[11];
System.out.println("请输入各个活动的开始时间");
for(int s=0;s<11;s++){
System.out.print("活动"+(s+1)+":");
Scanner st=new Scanner(System.in);
b[s]=st.nextInt();//b[]记录起始时间
}
System.out.println("请输入各个活动的结束时间");
for(int i=0;i<11;i++){
System.out.print("活动"+(i+1)+":");
Scanner sc=new Scanner(System.in);
a[i]=sc.nextInt();//a[]记录终止时间
}
for(int x=0;x<a.length-1;x++){//交换法对a[]终止时间进行排序
for(int y=x+1;y<a.length;y++){
if(a[y]<a[x]){
int temp;
temp=a[y];
a[y]=a[x];
a[x]=temp;
}
}
}
greedySelector(b,a,c);
}
private static void greedySelector(int[] s, int[] f,boolean []a) {
// TODO Auto-generated method stub
int n=s.length;
a[0]=true;
int j=0;
int count=1;
for(int i=1;i<n;i++){
if(s[i]>=f[j]){//相容活动的条件是前一个活动的结束时间小于或等于后一个活动的开始时间
a[i]=true;//该活动与其他活动存在相容关系,则记录为真
j=i;//活动序号变更,寻找下一个相容活动
count++;
}
else a[i]=false;
}
System.out.println("相容活动数量最大值:"+count);
System.out.print("相容活动分别为:");
for(int k=0;k<s.length;k++){
if(a[k]==true){
System.out.print("活动"+(k+1)+" ");
}
}
}
}