如果第一个人把任务委托给第二个人,第二个人再委托给第三个人,第三个人在委托给第四个人.....依次如此,
但是第二个不能将任务委托给第一个人,第三个人不能将任务委托给第一个和第二个,第四个不能委托给前三个,依次如此!这种算法如何解决!希望高手可以指点!

解决方案 »

  1.   

    定义个history的String啥的。每次委托的时候,检查被委托id在history里面是否存在,如果存在就不委托,如果不存在就委托且在history里面追加这个委托id。
      

  2.   

    这什么跟什么。。
    你在人这个类里加一个boolean的标识符 委托一次就置为true 委托之前先判断下 只有标识符为false的才能被委托 不就行了
      

  3.   

    svrmgrl connect internal startup exit
      

  4.   

    参考《java与模式》中的第12章 Chain of Responsibility(责任链)模式 
      

  5.   

    public void role(Array role,int num){
      boolean flag =false;  for(int i = num;i<role.size();i++){
         if(flag){
            role(role,num);
         }else{
           role.get(i)=.....;
         }
      }
    }大体意思,一点愚见.
      

  6.   

    显然楼主的这个要求中,隐含着一个次序(即所谓的第一个,第二个)
    一个简单的想法是:每一个人都有隐含着的那个委托次序一个数值型ID,那么:那么委托时,被委托人的ID大于委托人,就可以,若小于委托人的ID,则不可以。
      

  7.   

    这是一个取随机数的问题
    public static void main(String[] args){
        // 准备所有的代理人
        List<String> proxys = new ArrayList<String>();        
        proxys.add("People1");
        proxys.add("People2");
        proxys.add("People3");
        proxys.add("People4");
        proxys.add("People5");
        proxys.add("People6");
        proxys.add("People7");
        // 生成任务链
        List<String> taskLink = new ArrayList<String>();
        int length = proxys.size();
        while (length != 0) {
            // 随机取得一个代理人
            int maxIndex = length - 1;
            int pos = 0;
            pos = (int) ((float) Math.random() * maxIndex);
            // 将取到的代理人放到任务链中
            taskLink.add(proxys.remove(pos));
            length--;
        }    // 打印结果
        Iterator<String> it = taskLink.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
      

  8.   

    每个人都有一个id, id小的可以委托大的,Class Person{private int myId;
    public boolean canWeiTuo(int otherPersionId){
       
      boolean canWeiTuo = true;
       
      if(this.myId < otherPersionId){
           canWeiTuo = true;
      }else{
           canWeiTuo = false;  }
      return canWeiTuo;}
    }