本文共 1093 字,大约阅读时间需要 3 分钟。
题目链接:
1、在读入信息后,对其每个菜肴是否吃过需要建立一个标志数组,对每个菜肴为键,存储其包括的前置菜肴,由于前置菜肴数量不确定,所以需要用ArrayList来存储,用到 HashMap。
2、创建一个函数foodput,来具体实现对菜肴的放置,需要注意是否有互相制约,比如1是2的前置,2是1的前置,需要处理这种情况,调用栈来检查这种情况,当栈的长度超出了菜肴的总数,抛出异常,所以在主函数中需要处理异常。
import java.util.*; public class Main { static int[] flag;//标志其每个菜肴是否已经吃过 static ArrayListre=new ArrayList ();//存最后返回的ArrayList static Stack st=new Stack ();//用来判断前置菜肴和现在的是否为重叠的 static int n=0; public static void main(String[] args) { Scanner s=new Scanner(System.in); Map > arr=new HashMap >(); n= s.nextInt(); int len_fan=s.nextInt(); for(int i=0;i temp= new ArrayList (); temp=arr.get(a); temp.add(v); arr.put(a,temp) ;//先得到目前的菜肴,加上后放回去 }else { ArrayList fan= new ArrayList (); fan.add(v); arr.put(a, fan);//没有的时候新建一个放入MAP } } flag=new int[n]; for(int j=0;j > arr,int k) throws Exception { if(flag[k]==0) { st.push(k); if(st.size()>n) { //出现互相制约的 throw new Exception(); } if(arr.containsKey(k)) { for(int j : arr.get(k)) { foodput(arr,j); //这里需要递归调用其前置菜肴是否吃完 } } st.pop(); re.add(k); flag[k]=1; } }}
转载地址:http://phjwi.baihongyu.com/