Programming Resources
For Fun and Learning
Charles Cusack
Computer Science
Hope College
main

Python
C++
JAVA
PHP
SQL

Assignments


VerificationAlgs


P4Verify.cpp

/**************************************************************************

Test driver for Problem 4 of HW6, CSE310 Fall 2003
Written by: Clay Stevens, some code modified from code by Chris Bourke

***************************************************************************/

#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;

struct City {
	int x;
	int y;
	int visitCount;
};

int main(int argc, char **argv) {

	int numCities;  
	City* myCities;

	// Command and file checking 
        if(argc != 3) {
                cout << "Usage: P4Verify <datafile> <outputfile>\n" << endl;
                return -1;
        }

	ifstream data;
	ifstream sOutput;
	data.open(argv[1]);
	sOutput.open(argv[2]);
	if(data.fail() || sOutput.fail())
	{
		cerr << "File error: Failed to open one or both of the files " << endl;
		return -1;
	}

	//read in datafile
	//FORMAT: Line 1 = number of pairs
	//Each line after: x y coordinates
	data >> numCities;

	myCities = new City[numCities];

	for(int i = 0; i < numCities; i++)
	{
		data >> myCities[i].x;
		data >> myCities[i].y;
		myCities[i].visitCount = 0;
	}

	data.close();

	double totalCost = 0;
	double claimedCost;
        int first;
	int To;
	int From; 

	//Read in outputfile
	// Expects first line to be claimed total cost
	//    then list of cities in order to visit

	sOutput >> claimedCost;
	sOutput >> To;       // read in first city
        first=To; 
	To--;                // decrement To to refer to an index 


	for(int i = 1; i <= numCities; i++)
	{
		myCities[To].visitCount++;
		From = To+1;  //previous destination set to current source
                // This is a quick hack to make sure we get the last edge...
                if(i==numCities) 
                   To=first;
                 else 
		   sOutput >> To; //read new destination
		From--;
		To--;
		totalCost = totalCost + sqrt( (float) 
			(myCities[From].x- myCities[To].x)*(myCities[From].x - myCities[To].x) + 
			(myCities[From].y - myCities[To].y)*(myCities[From].y - myCities[To].y)); 
	}

	int extras = 0;
	while(!sOutput.eof())
	{
		sOutput >> extras;
		if(extras > 0){
			extras--;
			myCities[extras].visitCount++;
		}
	}

 	sOutput.close();

	cout << "Results: " << endl;
	cout << "==================================" << endl;
	cout << "Claimed Cost: " << claimedCost << endl;
	cout << "Calculated Cost: " << totalCost << endl;
	
	int multiVisit = 0;
	int notVisit = 0;
	for (int j = 0; j < numCities; j++){
		if (myCities[j].visitCount > 1){
			multiVisit++;
		}
		if (myCities[j].visitCount == 0) {
			notVisit++;
cout<<"Not visited: "<<j<<"\n";
		}
	}

	cout << "# Cities Visited More Than Once: " << multiVisit << endl;
	cout << "# Cities Not Visited At All: " << notVisit << endl;

	return 1;
}