111,120
社区成员
发帖
与我相关
我的任务
分享using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
//int[,] data = { { 1, 2, 3 }, { 3, 1, 2 }, { 2, 3, 1 } };
//int[,] data = { { 4, 5, 7, 6 }, { 2, 9, 8, 0 }, { 4, 0, 3, 2 }, { 2, 1, 0, 5 } };
//int[,] data = { { 1, 100, 100 }, { 1, 100, 100 }, { 100, 1, 1 } };
int[,] data = { { 0, 2, 0 }, { 2, 3, 2 }, { 0, 2, 0 } };
int min = foo(data).Min(x => x.Sum());
Console.WriteLine(min);
}
static IEnumerable<int[]> foo(int[,] data)
{
List<Tuple<int, int, int>> m = new List<Tuple<int, int, int>>();
int n = data.GetLength(0);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
m.Add(new Tuple<int, int, int>(i, j, data[i, j]));
}
}
m = m.OrderBy(x => x.Item3).ToList();
int[] row = Enumerable.Range(0, n).Select(x => n).ToArray();
int[] col = Enumerable.Range(0, n).Select(x => n).ToArray();
return foo1(data, m, col, row, n, m.Count - 1);
}
static IEnumerable<int[]> foo1(int[,] data, List<Tuple<int, int, int>> m, int[] col, int[] row, int n, int starti)
{
for (int i = starti; i >= 0; i--)
{
var t = m[i];
if (row[t.Item1] > 1 && col[t.Item2] > 1)
{
foreach (var item in foo1(data, m.ToList(), col.ToArray(), row.ToArray(), n, i - 1))
yield return item;
m.RemoveAt(i);
row[t.Item1]--;
col[t.Item2]--;
}
}
yield return m.Select(x => x.Item3).ToArray();
}
}
}[/quote]
输入
多组测试数据。首先是数据组数T
对于每组测试数据,第1行是两个正整数m, n,分别表示矩阵的行数和列数。
接下来的m行,每行n个整数,之间用一个空格分隔,表示矩阵A的元素。
这部分没有定义到呀,上面代码是定义好固定的数组在进行编译的。。。using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
//int[,] data = { { 1, 2, 3 }, { 3, 1, 2 }, { 2, 3, 1 } };
//int[,] data = { { 4, 5, 7, 6 }, { 2, 9, 8, 0 }, { 4, 0, 3, 2 }, { 2, 1, 0, 5 } };
//int[,] data = { { 1, 100, 100 }, { 1, 100, 100 }, { 100, 1, 1 } };
int[,] data = { { 0, 2, 0 }, { 2, 3, 2 }, { 0, 2, 0 } };
int min = foo(data).Min(x => x.Sum());
Console.WriteLine(min);
}
static IEnumerable<int[]> foo(int[,] data)
{
List<Tuple<int, int, int>> m = new List<Tuple<int, int, int>>();
int n = data.GetLength(0);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
m.Add(new Tuple<int, int, int>(i, j, data[i, j]));
}
}
m = m.OrderBy(x => x.Item3).ToList();
int[] row = Enumerable.Range(0, n).Select(x => n).ToArray();
int[] col = Enumerable.Range(0, n).Select(x => n).ToArray();
return foo1(data, m, col, row, n, m.Count - 1);
}
static IEnumerable<int[]> foo1(int[,] data, List<Tuple<int, int, int>> m, int[] col, int[] row, int n, int starti)
{
for (int i = starti; i >= 0; i--)
{
var t = m[i];
if (row[t.Item1] > 1 && col[t.Item2] > 1)
{
foreach (var item in foo1(data, m.ToList(), col.ToArray(), row.ToArray(), n, i - 1))
yield return item;
m.RemoveAt(i);
row[t.Item1]--;
col[t.Item2]--;
}
}
yield return m.Select(x => x.Item3).ToArray();
}
}
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
//int[,] data = { { 1, 2, 3 }, { 3, 1, 2 }, { 2, 3, 1 } };
int[,] data = { { 4, 5, 7, 6 }, { 2, 9, 8, 0 }, { 4, 0, 3, 2 }, { 2, 1, 0, 5 } };
//int[,] data = { { 1, 100, 100 }, { 1, 100, 100 }, { 100, 1, 1 } };
int[] r = foo(data);
Console.WriteLine(r.Sum());
}
static int[] foo(int[,] data)
{
List<Tuple<int, int, int>> m = new List<Tuple<int, int, int>>();
int n = data.GetLength(0);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
m.Add(new Tuple<int, int, int>(i, j, data[i, j]));
}
}
m = m.OrderBy(x => x.Item3).ToList();
int[] row = Enumerable.Range(0, n).Select(x => n).ToArray();
int[] col = Enumerable.Range(0, n).Select(x => n).ToArray();
for (int i = m.Count - 1; i >= 0; i--)
{
var t = m[i];
if (row[t.Item1] > 1 && col[t.Item2] > 1)
{
m.RemoveAt(i);
row[t.Item1]--;
col[t.Item2]--;
}
}
return m.Select(x => x.Item3).ToArray();
}
}
}
优化了下。using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
int[,] data = { { 1, 2, 3 }, { 3, 1, 2 }, { 2, 3, 1 } };
//int[,] data = { { 4, 5, 7, 6 }, { 2, 9, 8, 0 }, { 4, 0, 3, 2 }, { 2, 1, 0, 5 } };
//int[,] data = { { 1, 100, 100 }, { 1, 100, 100 }, { 100, 1, 1 } };
int[] r = foo(data);
Console.WriteLine(r.Sum());
}
static int[] foo(int[,] data)
{
List<Tuple<int, int, int>> m = new List<Tuple<int, int, int>>();
int n = data.GetLength(0);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
m.Add(new Tuple<int, int, int>(i, j, data[i, j]));
}
}
m = m.OrderBy(x => x.Item3).ToList();
for (int i = m.Count - 1; i >= 0; i--)
{
var t = m[i];
m.RemoveAt(i);
int[] row = new int[n];
int[] col = new int[n];
foreach (var item in m)
{
col[item.Item1] = 1;
row[item.Item2] = 1;
}
if (row.Sum() != n || col.Sum() != n)
m.Add(t);
}
return m.Select(x => x.Item3).ToArray();
}
}
}using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
int[,] data = { { 1, 2, 3 }, { 3, 1, 2 }, { 2, 3, 1 } };
//int[,] data = { { 4, 5, 7, 6 }, { 2, 9, 8, 0 }, { 4, 0, 3, 2 }, { 2, 1, 6, 5 } };
int[] r = foo(data);
Console.WriteLine(r.Select((x, i) => data[i, x]).Sum());
}
static int[] foo(int[,] data)
{
int[] result = Enumerable.Range(0, data.GetLength(0)).ToArray();
for (int i = 0; i < data.GetLength(0); i++)
{
for (int j = i + 1; j < data.GetLength(0); j++)
{
if (data[i, result[i]] + data[j, result[j]] > data[i, result[j]] + data[j, result[i]])
{
int t = result[i];
result[i] = result[j];
result[j] = t;
}
}
}
return result;
}
}
}