You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

79 lines
2.0 KiB

  1. #include <fstream>
  2. #include <iostream>
  3. #include <list>
  4. #include <memory>
  5. #include <vector>
  6. // find determinant of a square matrix starting from the row 'row'
  7. double det(std::list<std::shared_ptr<std::vector<double>>> &m, int row) {
  8. if (m.size() == 2) {
  9. double a, b, c, d;
  10. auto it = m.begin();
  11. a = (**it)[row], c = (**it)[row+1];
  12. it++;
  13. b = (**it)[row], d = (**it)[row+1];
  14. return (a * d) - (b * c);
  15. }
  16. double res = 0;
  17. auto it = m.begin();
  18. for (size_t i = 0; i < m.size(); ++i) {
  19. // the even rows (else) and odd rows (if)
  20. if (i & 1) {
  21. std::shared_ptr<std::vector<double>> v = *it;
  22. auto temp = it;
  23. temp++;
  24. m.erase(it);
  25. res -= (*v)[row] * det(m, row + 1);
  26. m.insert(temp, v);
  27. } else {
  28. std::shared_ptr<std::vector<double>> v = *it;
  29. auto temp = it;
  30. temp++;
  31. m.erase(it);
  32. res += (*v)[row] * det(m, row + 1);
  33. m.insert(temp, v);
  34. }
  35. it++;
  36. }
  37. return res;
  38. }
  39. int main() {
  40. std::ifstream in;
  41. std::ofstream out;
  42. in.open("input.txt");
  43. out.open("output.txt");
  44. char c;
  45. std::vector<std::vector<double>> v;
  46. for (size_t i = 0; in >> c; ++i) {
  47. if (c == '{' || c == ',') {
  48. v.push_back(std::vector<double>());
  49. for (size_t j = 0; in >> c; ++j) {
  50. if (c == '{' || c == ',') {
  51. int a;
  52. in >> a;
  53. v[i].push_back(a);
  54. } else {
  55. break;
  56. }
  57. }
  58. } else {
  59. break;
  60. }
  61. }
  62. std::list<std::shared_ptr<std::vector<double>>> m;
  63. for (size_t i = 0; i < v.size(); ++i) {
  64. m.push_back(
  65. std::make_shared<std::vector<double>>(std::vector<double>()));
  66. auto it = m.end();
  67. it--;
  68. for (size_t j = 0; j < v.size(); ++j) {
  69. (*it)->push_back(v[j][i]);
  70. }
  71. }
  72. out << det(m, 0) << '\n';
  73. }