import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Stack;
/**
* 功能描述:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向
* 队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单
* @author Administrator
*
*/
public class Compare {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Team teamA=new Team();//A队
Man a=new Man("a");
teamA.addTeamMem(a);
a=new Man("b");
teamA.addTeamMem(a);
a=new Man("c");
teamA.addTeamMem(a);
Team teamB=new Team();//B队
a=new Man("x");
teamB.addTeamMem(a);
a=new Man("y");
teamB.addTeamMem(a);
a=new Man("z");
teamB.addTeamMem(a);
//假设两组队员和对方队员全部PK,当然这是不可能的
for(int i=0;i<teamA.getTeamSize();i++){
Man man=teamA.getTeamMem(i);
for(int j=0;j<teamB.getTeamSize();j++){
man.addMatch(teamB.getTeamMem(j));
}
}
for(int i=0;i<teamB.getTeamSize();i++){
Man man=teamB.getTeamMem(i);
for(int j=0;j<teamA.getTeamSize();j++){
man.addMatch(teamA.getTeamMem(j));
}
}
//根据条件排除A队队员的对手
for(int i=0;i<teamA.getTeamSize();i++){
Man man=teamA.getTeamMem(i);
if(man.getName()!=null&&man.getName().equals("a")){
Man notMach=man.getMatchByName("x");
if(notMach!=null){
notMach.deleteMatch("a");
}
man.deleteMatch("x");
}else if(man.getName()!=null&&man.getName().equals("c")){
Man notMach=man.getMatchByName("x");
if(notMach!=null){
notMach.deleteMatch("c");
}
man.deleteMatch("x");
notMach=man.getMatchByName("z");
if(notMach!=null){
notMach.deleteMatch("c");
}
man.deleteMatch("z");
}
}
//如果两个队中队员的假设的对手只为一个,那么已经找到对手,并且该对手就是该队员的最终对手
for(int i=0;i<teamA.getTeamSize();i++){
Man man=teamA.getTeamMem(i);
if(man.listMatch().size()==1){
Man match=man.listMatch().get(0);
man.setRealMatch(match);match.setRealMatch(man);
}
}
for(int i=0;i<teamB.getTeamSize();i++){
Man man=teamB.getTeamMem(i);
if(man.listMatch().size()==1){
Man match=man.listMatch().get(0);
man.setRealMatch(match);match.setRealMatch(man);
}
}
//如果队员没有找到对手,那么他就去找对方没有找到对手的队员PK
for(int i=0;i<teamA.getTeamSize();i++){
Man man=teamA.getTeamMem(i);
if(man.getRealMatch()==null){
for(int j=0;j<teamB.getTeamSize();j++){
Man manp=teamB.getTeamMem(j);
if(manp.getRealMatch()==null){
man.setRealMatch(manp);
}
}
}
}
//查看A队队员的真正对手
for(int i=0;i<teamA.getTeamSize();i++){
Man man=teamA.getTeamMem(i);
System.out.println("A队中"+man.getName()+"队员对B队中"+man.getRealMatch().getName()+"队员");
}
}
}
/**
* 队类
* @author Administrator
*
*/
class Team{
private Stack<Man> menbers=new Stack<Man>();//队员列表
public void addTeamMem(Man man){
this.menbers.push(man);
}
public Man getTeamMem(int index){
return this.menbers.elementAt(index);
}
public int getTeamSize(){
return menbers.size();
}
}
/**
* 队员类
* @author Administrator
*
*/
class Man{
private String name;//队员名称
private Map<String, Man> match=null;//待定比赛对手队员范围
private Man realMatch=null;//最终决定的对手
public Man getRealMatch() {
return realMatch;
}
public void setRealMatch(Man realMatch) {
this.realMatch = realMatch;
}
public Man(String name) {
this.name = name;
this.match = new HashMap<String, Man>();
}
public Man getMatchByName(String name){
if(match!=null&&match.containsKey(name))return match.get(name);else return null;
}
public List<Man> listMatch(){
List<Man> l=new ArrayList<Man>();
for (Map.Entry<String,Man> m:match.entrySet()){
l.add(m.getValue());
}
return l;
}
public void deleteMatch(String name){
if(match!=null&&match.containsKey(name))match.remove(name);
}
public void addMatch(Man man){
match.put(man.getName(), man);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}