Как использовать координаты из входного файла с алгоритмом Прима для того, чтобы создавать круги с помощью Pygraphics и C ++?

Я просмотрел много примеров алгоритма Прима здесь и в Google и не нашел реального ответа на этот вопрос … Пожалуйста, извините мою структуру этой проблемы. Я ужасен с тем, как S / O печатает вещи.

У меня есть входной файлSmallGraph.txt«который содержит набор координат и количество вершин вверху:

9
50 100
100 150
200 150
300 150
350 100
300 50
200 50
100 50
150 100

У меня много проблем, когда я пытаюсь понять, как прочитать эти входные элементы, чтобы мой цикл while мог печатать «круг» для каждой вершины, упомянутой выше, чтобы я мог запустить алгоритм Prim для минимального остовного дерева.

В каком коде я до сих пор пытался распечатать что-то с помощью цикла while. Кроме того, несколько классов для реализации алгоритма Прима с этими точками, которые мне нужно построить через python:

#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <cstring>
#include <math.h>       /* pow() function */// This line allows commonly-used functions to be used without specifying the
// library in which that function is defined. For instance, this line allows
// the use of "cout" rather than the full specification "cout"using namespace std;

class SetOfIntegers
{
public:
// Constructor. Any setup operation you wish for the class.
SetOfIntegers()
{
members.clear();
} // end constructorvoid add(int m)  // Add members to set WITHOUT repetition
{
for (auto i : members)
{
if (i == m) return;  // no addition of existing member
}
members.push_back(m);
}
int size() { return members.size(); }
void show() { for (auto i: members) cout << i << "  "; cout << endl; }

bool isMember(int m)
{
//cout << "isMember(" << m << ") is ";
for (auto i : members)
{
if (i == m)
{
//cout << " true" << endl;
return true;
}
}
//cout << " false" << endl;
return false;
}

private:
vector<int> members;

};

//--------------------------------------------------------------------------
class Point
{

public:

// Constructor. Any setup operation you wish for the class.
Point()
{
x = 0; y = 0;
} // end constructor
Point(int a, int b, int id)
{
x = a; y = b; pointID = id;
} // end constructor

int getX() { return x; }
int getY() { return y; }
int getID() { return pointID; }

private:
int x = 0;
int y = 0;
int pointID = 0;

}; // end class Point//--------------------------------------------------------------------------
class Edge
{

public:

// Constructor. Any setup operation you wish for the class.
Edge()
{

} // end constructor
Edge(Point ptA, Point ptB)
{
pointA = ptA;
pointB = ptB;
length = sqrt(pow(abs(pointA.getX() - pointB.getX() ), 2) + pow(abs(pointA.getY() - pointB.getY() ), 2) );
} // end constructor

Point getPtA() { return pointA; }
Point getPtB() { return pointB; }
double getLen() { return length; }
int getPtAID() { return pointA.getID(); }
int getPtBID() { return pointB.getID(); }

private:
Point pointA;
Point pointB;
double length;

}; // end class Edge// NOTE: DO NOT declare with empty parentheses, as vector<Point> myPointvector();
vector<Point> myPointvector;  // vector will expand as needed
vector<Edge> MinSpanTree;// Pass arguments or parameters from command-line execution. argc is the count of
// those parameters, including the executable filename. argv[] is an array of the
// parameters.
int main (int argc, char *argv[])
{
string token;
int xValue, yValue;
ifstream fin;
int coordPairs;  // number of coordinate pairs in the file
int ptX, ptY;
vector<Edge> unsortedEdgeVector;
vector<Edge> sortedEdgeVector;

int loopCounter;
int pointCounter = 0;
double MSTLength = 0.0;// Check the number of arguments. Expected: filename of a file
if (argc != 2)  // This check is often hardcoded
{   // If failure in parameters, offer advice for correction
cout << "\nThis program uses command-line argument.\n";
cout << "Usage: a.exe <filename>\n";
exit(0);
}try  // All lines within this block are part of the same exception handler
{
fin.open(argv[1]);
}
catch (exception& ex)
{
cout << ex.what();  // display standard explanation of the exception
exit(0);  // exit the program
}// Read from the file, one token at a time. If the type of token is known, it
// can be read into a corresponding variable type, such as
//          in >> x;    // Read the first item into an integer variable x.
//          in >> str;  // Read the next item into a string variable str.
//for (int i = 0; 1 != 10; i++) {
//  fin >> ptX[2] >> ptY[2];
//}
//cout << ptX << endl;

// This line provides the graphic window setup.
cout << "800 600 white" << endl;

fin >> coordPairs;
while (fin >> ptX)
{
// Do something with the element read from the file
cout << ptX << endl;
fin >> ptY;
cout << ptY << endl;

cout << "circle " << ptX << " " << ptY << " " << 20 << " seagreen" << endl;

/*
Point dummyPoint(ptX, ptY, pointCounter++);
myPointvector.push_back(dummyPoint);  // vector will expand as needed

cout << "Now myPointvector has size " << myPointvector.size() << endl;
*/

} // end while

fin.close();

}

Как вы можете видеть … у меня есть функция while в моей основной функции, которая пытается создать «круг» на основе ptX и ptY. Вот с чем у меня проблемы .. Как мне прочитать этот входной файл, чтобы получить эти точки и заставить их создать круг через python? Если вы заметили … Я попытался цикл for, который в настоящее время закомментирован для чтения файла.

0

Решение

Я использовал неправильную команду для запроса информации из входного файла. Я использовал команды:

g++ -std=c++11 PrimMSTAlgor.cpp (Compile the code)
a PrimMSTAlgor.cpp > PrimData.dat (Put data into primData.dat from the .cpp file)
python BearPlot.py PrimData.dat (use python to apply graphics)

Вторая команда неверна. Мне нужно использовать файл .txt в качестве аргумента для «а» (выполнение).

a SmallGraph.txt > PrimData.dat

То, что у меня уже есть, настроено таким образом, чтобы вводить данные в файл .dat, я просто не мог его увидеть …

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]