C#穷举法问题

两个小队的对抗赛,队员分别是A、B、C和X、Y、Z,但是A不想和X比,B不想和X、Z比,用程序求出最合适的出场顺序用C#代码实现... 两个小队的对抗赛,队员分别是A、B、C和X、Y、Z,但是A不想和X比,B不想和X、Z比,用程序求出最合适的出场顺序
用C#代码实现
展开
 我来答
是小白啊2k
2013-03-29 · TA获得超过2566个赞
知道小有建树答主
回答量:1183
采纳率:0%
帮助的人:1166万
展开全部
public partial class Form1 : Form
{
private Hashtable mapRefuse;
private Hashtable list1Already;
private List<string> list1Result;
private List<string> usedList;
List<string> list1;
List<string> list2;
public Form1()
{
InitializeComponent();
mapRefuse = new Hashtable();
list1Already = new Hashtable();
list1Result = new List<string>();
usedList = new List<string>();
}

private void button1_Click(object sender, EventArgs e)
{
list1 = new List<string> { "A", "B", "C" };
list2 = new List<string> { "X", "Y", "Z" };
mapRefuse.Add("A", new List<string> { "X" });
mapRefuse.Add("B", new List<string> { "X", "Z" });
mapRefuse.Add("C", new List<string>());
bool flg = false;
while (!flg)
{
flg = match();
}
foreach (string str in list1Result)
{
MessageBox.Show(str);
}
}

private bool match()
{
bool flg;
list1Result.Clear();
usedList.Clear();
foreach (string t1 in list1)
{
List<string> t1Reuse = (List<string>)mapRefuse[t1];
List<string> listT1Already = (List<string>)list1Already[t1];
if (listT1Already == null)
{
listT1Already = new List<string>();
list1Already.Add(t1, listT1Already);
}
flg = false;
foreach (string t2 in list2)
{
if (!usedList.Contains(t2))
{
if (!t1Reuse.Contains(t2))
{
if (!listT1Already.Contains(t2))
{
list1Result.Add(t1 + "-" + t2);
listT1Already.Add(t2);
usedList.Add(t2);
flg = true;
break;
}
}
}
}
if(!flg)
return flg;
}
return list1Result.Count==list1.Count;

} }
2012_senlin
2013-03-29 · 超过24用户采纳过TA的回答
知道答主
回答量:179
采纳率:0%
帮助的人:66.3万
展开全部
A对Z B对Y C对X
追问
哥,用C#代码实现,我知道结果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式