Переписать код с С++ на С# - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Прошу помощи с переписыванием кода с другого языка.
Листинг программы
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. int n1; //количество вершин в первой доле графа
  5. int n2; //количество вершин во второй доле графа
  6. int m; //количество ребер в графе
  7. vector<int> *adj; //список смежности
  8. vector<bool> used; //массив для хранения информации о пройденных и не пройденных вершинах
  9. int mtSize = 0; //размер максимального паросочетания
  10. vector<int> mt; //массив для хранения ребер, образующих максимальное паросочетание
  11. //алгоритм Куна поиска максимального паросочетания
  12. bool kuhn(int v) {
  13. //если вершина является пройденной, то не производим из нее вызов процедуры
  14. if (used[v]) {
  15. return false;
  16. }
  17. used[v] = true; //помечаем вершину первой доли, как пройденную
  18. //просматриваем все вершины второй доли, смежные с рассматриваемой вершиной первой доли
  19. for (int i = 0; i < adj[v].size(); ++i) {
  20. int w = adj[v][i];
  21. //нашли увеличивающую цепь, добавляем ребро (v, w) в паросочетание
  22. if (mt[w] == -1 || kuhn(mt[w])) {
  23. mt[w] = v;
  24. return true;
  25. }
  26. }
  27. return false;
  28. }
  29. //процедура считывания входных данных с консоли
  30. void readData() {
  31. //считываем количество вершин в первой и второй доли и количество ребер графа
  32. scanf("%d %d %d", &n1, &n2, &m);
  33. //инициализируем список смежности размерности n1
  34. adj = new vector<int>[n1];
  35. //считываем граф, заданный списком ребер
  36. for (int i = 0; i < m; ++i) {
  37. int v, w;
  38. scanf("%d %d", &v, &w);
  39. v--;
  40. w--;
  41. //добавляем ребро (v, w) в граф
  42. adj[v].push_back(w);
  43. }
  44. used.assign(n1, false);
  45. mt.assign(n2, -1);
  46. }
  47. void solve() {
  48. //находим максимальное паросочетание
  49. for (int v = 0; v < n1; ++v) {
  50. used.assign(n1, false);
  51. //если нашли увеличивающую цепь,
  52. //то размер максимального паросочетания увеличиваем на 1
  53. if (kuhn(v)) {
  54. mtSize++;
  55. }
  56. }
  57. }
  58. void printData() {
  59. printf("%d\n", mtSize);
  60. for (int i = 0; i < n2; ++i) {
  61. if (mt[i] != -1) {
  62. printf("%d %d\n", mt[i] + 1, i + 1);
  63. }
  64. }
  65. }
  66. int main()
  67. {
  68. readData();
  69. solve();
  70. printData();
  71. return 0;
  72. }
Тема еще актуальна, у меня возникают проблемы с областями видимости этих глобальных переменных.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace Para
  7. {
  8. class Program
  9. {
  10. static void Main(string[] args)
  11. {
  12. }
  13. static bool Kohn(List<bool> used, List<int> adj, List<int> mt, int v)
  14. {
  15. //если вершина пройдена, то не производим из нее вызов процедуры
  16. if (used[v])
  17. {
  18. return false;
  19. }
  20. used[v] = true; //помечаем вершину первой доли, как пройденную
  21. //просматриваем все вершины второй доли, смежные с рассматриваемой вершиной первой доли
  22. for (int i = 0; i < adj.Count; i++)
  23. {
  24. int w = adj[v, i]; //тут ошибка
  25. //нашли увеличивающую цепь, добавляем ребро (v, w) в паросочетание
  26. if (mt[w] == -1 || Kohn(used, adj, mt, v))
  27. {
  28. mt[w] = v;
  29. return true;
  30. }
  31. }
  32. return false;
  33. }
  34. //процедура считывания входных данных с консоли
  35. static int ReadData()
  36. {
  37. //считываем количество вершин в первой и второй доли и количество ребер графа
  38. Console.WriteLine("Input n1");
  39. int n1 = Console.Read();
  40. Console.WriteLine("Input n2");
  41. int n2 = Console.Read();
  42. Console.WriteLine("Input m");
  43. int m = Console.Read();
  44. //инициализируем список смежности размерности n1
  45. List<int>[] adj = new List<int>[n1];
  46. for (int i = 0; i < m; i++)
  47. {
  48. int v, w;
  49. Console.WriteLine("Input v and w:");
  50. v = Console.Read();
  51. w = Console.Read();
  52. v--;
  53. w--;
  54. adj[v].Add(w);
  55. }
  56. //used.assign(n1, false); -здесь не знаю как переписать
  57. //mt.assign(n2, -1);
  58. return n1;
  59. }
  60. static void Solve(int n1, List<bool> used, List<int> adj, List<int> mt)
  61. {
  62. int maxSize =0;
  63. //находим максимальное паросочетание
  64. for (int v = 0; v < n1; v++)
  65. {
  66. //used.assign(n1, false);
  67. if (Kohn(used, adj, mt, v))
  68. maxSize++;
  69. }
  70. }
  71. static void Print()
  72. {
  73. //тут е понятно как создать область видимости для все полученных данных,
  74. //чтобы их распечатать
  75. }
  76. }
  77. }
Тема еще актуальна

Решение задачи: «Переписать код с С++ на С#»

textual
Листинг программы
  1. //used.assign(n1, false);  -здесь не знаю как переписать
  2.             //mt.assign(n2, -1);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут