笛卡尔积

人纵有万般能耐,终也敌不过天命


Program.cs代码:

class Program
    {
        //保存笛卡尔结果集的全局变量
        public static List<string> result = new List<string>();
        static void Main(string[] args)
        { 
            var words = new List<List<string>>()
            {
                new List<string>(){"你","我","他"},
                new List<string>(){"食","衣","住","行"},
                new List<string>(){"江苏"},
                new List<string>(){"南通","苏州","无锡"}
            };
            CartesianProduct(new List<string>(), words);

            Console.WriteLine("=============笛卡尔积记录条数:{0}=============", result.Count);
            foreach (var item in result)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }



        /// <summary>
        /// 求集合的笛卡尔积递归算法
        /// </summary>
        /// <param name="temp">用于保存求得的某条笛卡尔记录的临时变量</param>
        /// <param name="words">包含要求笛卡尔积的集合数组</param>
        public static void CartesianProduct(List<string> temp, List<List<string>> words)
        {
            //递归结束条件,当集合数组中只剩最后一个数组时,说明已经递归到最里层
            //此时只需将该数组中的元素依次添加到temp中。
            if (words.Count == 1)
            {
                foreach (var item in words[0])
                {
                    var t = new List<string>(temp);
                    t.Add(item);
                    result.Add(string.Join(",", t));
                }
                return;
            }
            //取出第一个数组中的元素和子集的笛卡尔积进行组合,就是所求笛卡尔积
            var row = words[0];
            foreach (var item in row)
            {
                var t = new List<string>(temp);
                var w = new List<List<string>>(words);
                w.Remove(row);
                t.Add(item);
                CartesianProduct(t, w);
            }
        }
    }

运行结果如图:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值