- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个图形着色程序,它接受一个二维数组作为邻接矩阵,并根据该邻接矩阵为图形着色。此文件是 Color.cpp
。我有另一个程序可以创建这个邻接矩阵并将其放入一个文本文件中,这个程序 AdjacencyMatrix.cpp
。
当我最初创建着色程序时,我将邻接矩阵硬编码到二维数组 graph[V][V]
中,其中 V 是顶点数。
这是两个独立的程序,我只是将 AdjacencyMatrix.cpp
创建的邻接矩阵复制并粘贴到 Color.cpp
中。
因为我的程序已经创建了一个包含邻接矩阵的文件,所以我想让我的着色程序读取该文件。我知道最好的做法是将它们组合起来,并将存储在数组中的矩阵传递到一个内聚程序中的着色程序中。我认为目前读取文件是我最简单的解决方案,但如果更有经验的用户能告诉我如何将矩阵存储在数据结构中并将其传递到着色程序中,我欢迎它。
邻接矩阵.cpp
该程序接收一个文件,该文件是作为相邻对列出的整数字符串,并从中创建一个邻接矩阵,然后将其存储在一个文件中。文件“24cell_skeleton.txt”是它读入的文件,“out.txt”是它打印矩阵的文件。
#include <string>
#include <sstream>
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
const int cellSize = 24;
bool graph[cellSize][cellSize];
int prevNum = -1;
int currNum = -1;
bool markMatrix(int x, int y) {
graph[x][y] = true;
graph[y][x] = true;
/*std:cout << "adding pair: " << y << "," << x << "\n";*/
return true;
}
int main()
{
ifstream in("C:\\Users\\Austin\\Documents\\adjMatrix\\24cell_skeleton.txt");
ofstream out;
out.open("C:\\Users\\Austin\\Documents\\adjMatrix\\output.txt", ios::out);
ios::out;
string line, field;
vector< vector<string> > array; // the 2D array
vector<string> v; // array of values for one line only
while (getline(in, line)) // get next line in file
{
v.clear();
stringstream ss(line);
while (getline(ss, field, ',')) // break line into comma delimited fields
{
v.push_back(field); // add each field to the 1D array
}
array.push_back(v); // add the 1D array to the 2D array
}
// print out what was read in
bool firstIter = true;
for (size_t i = 0; i<array.size(); ++i)
{
for (size_t j = 0; j<array[i].size(); ++j)
{
string curr = array[i][j]; // (separate fields by |)
prevNum = currNum;
currNum = stoi(curr);
if (j != 0 && firstIter) { //if its not the first iteration . . . or the last?
/*out << "adding pair: " << prevNum << "," << currNum << "\n";*/
markMatrix(prevNum, currNum);
}
}
firstIter = false;
}
in.close();
//std::cout << "{";
for (int i = 1; i <= cellSize; ++i)
{
std::cout << "{";
out << "{";
for (int j = 1; j <= cellSize; ++j)
{
//std::cout << "{";
std::cout << graph[i][j] << ' ';
std::cout << ", ";
out << graph[i][j] << ' ';
out << ", ";
//std::cout << "}";
}
out << "},";
std::cout << "},";
std::cout << std::endl;
}
//std::cout << "}";
out.close();
//cout << graph[534][42];
system("pause");
return 0;
}
颜色.cpp
此文件为给定邻接矩阵的图形着色。正如我之前提到的,矩阵被硬编码到其中(从前一个程序创建的文件中复制并粘贴)。这是我想阅读文件而不是自己复制和粘贴的地方。
#include <string>
#include <sstream>
#include <iostream>
#include <vector>
#include <fstream>
#include<stdio.h>
#include<cstdio>
// Number of vertices in the graph
#define V 24
using namespace std;
//this function was added in the update to attempt reading file and storing into a 2d matrix
int createMatrix(int myArray[V][V])
{
ifstream in("C:\\Users\\Austin\\Documents\\adjMatrix\\output.txt");
for (int i = 0; i < V; i++)
{
for (int j = 0; j < V; j++)
{
in >> myArray[i][j];
}
}
return myArray[V][V];
}
//end of updated code added
void printSolution(int color[]);
/* A utility function to check if the current color assignment
is safe for vertex v */
bool isSafe(int v, bool graph[V][V], int color[], int c)
{
for (int i = 0; i < V; i++)
if (graph[v][i] && c == color[i])
return false;
return true;
}
/* A recursive utility function to solve m coloring problem */
bool graphColoringUtil(bool graph[V][V], int m, int color[], int v)
{
/* base case: If all vertices are assigned a color then
return true */
if (v == V)
return true;
/* Consider this vertex v and try different colors */
for (int c = 1; c <= m; c++)
{
/* Check if assignment of color c to v is fine*/
if (isSafe(v, graph, color, c))
{
color[v] = c;
/* recur to assign colors to rest of the vertices */
if (graphColoringUtil(graph, m, color, v + 1) == true)
return true;
/* If assigning color c doesn't lead to a solution
then remove it */
color[v] = 0;
}
}
/* If no color can be assigned to this vertex then return false */
return false;
}
bool graphColoring(bool graph[V][V], int m)
{
// Initialize all color values as 0. This initialization is needed
// correct functioning of isSafe()
int *color = new int[V];
for (int i = 0; i < V; i++)
color[i] = 0;
// Call graphColoringUtil() for vertex 0
if (graphColoringUtil(graph, m, color, 0) == false)
{
std::cout << "Solution does not exist";
return false;
}
// Print the solution
printSolution(color);
return true;
}
/* A utility function to print solution */
void printSolution(int color[])
{
std::cout << "Solution Exists:"
" Following are the assigned colors \n";
for (int i = 0; i < V; i++)
std::cout << color[i];
std::cout << "\n";
}
// driver program to test above function
int main()
{
/* Create following graph and test whether it is 3 colorable
(3)---(2)
| / |
| / |
| / |
(0)---(1)
*/
bool graph[V][V] = {
{ 0 , 1 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , },
{ 1 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 0 , 0 , 1 , 0 , 0 , },
{ 0 , 1 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 1 , },
{ 1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , },
{ 1 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 1 , 1 , },
{ 0 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , },
{ 0 , 1 , 1 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , },
{ 1 , 0 , 1 , 1 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , },
{ 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , },
{ 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 0 , 1 , },
{ 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , },
{ 0 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 0 , 1 , 1 , },
{ 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , },
{ 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 1 , },
{ 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , },
{ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , },
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , },
{ 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , },
{ 1 , 1 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , },
{ 0 , 0 , 1 , 1 , 0 , 1 , 1 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , },
{ 1 , 0 , 0 , 1 , 1 , 0 , 0 , 1 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , },
{ 1 , 1 , 0 , 1 , 1 , 1 , 0 , 0 , 1 , 1 , 1 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , },
{ 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , },
{ 0 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , },
};
int m = 5; // Number of colors
graphColoring(graph, m);
//return 0;
system("pause");
}
有没有办法从文件中获取这个矩阵而不是将其硬编码到程序中?括号和逗号很容易在文件中添加或删除。当硬编码到着色程序中时,它们是必需的,但如果我可以从文件中读取,我认为它们不是必需的。
为了尽可能清楚,在 Color.cpp
中看到 24x24 矩阵的地方,我希望该部分是从 out.txt 中读取的 AdjacencyMatrix 矩阵。 cpp
创建。
编辑/更新
到目前为止,我在 color.cpp
的开头有这个
int createMatrix(int myArray[V][V])
{
ifstream in("C:\\Users\\Austin\\Documents\\adjMatrix\\output.txt");
for (int i = 0; i < V; i++)
{
for (int j = 0; j < V; j++)
{
in >> myArray[i][j];
}
}
return myArray[V][V];
}
我知道这里有些问题,但如果我能让它工作,我计划使用类似的东西
bool graph[V][V] =
{
myArray[V][V]
};
在 main()
中。
到目前为止,VisualStudio 说 myArray
是一个未声明的标识符,并且在 main()
中未定义。
最佳答案
您的 createMatrix
函数几乎已经完成,但是 return myArray[V][V];
不是您想做的。这就是说返回数组边界之外的单个 int
(大小为 V 的数组在 0 到 V-1 之间有效。Undefined Behaviour 破坏数组的边界将导致错误。
幸运的是,您不必退回该死的东西。 myArray
是指向调用 createMatrix
的数组的指针(参见 What is array decaying? )所以 in >> myArray[i][j];
正在将文件直接读入数组。
因此进行一些检查以确保读取成功:
bool createMatrix(int myArray[V][V])
{
ifstream in("C:\\Users\\Austin\\Documents\\adjMatrix\\output.txt");
if (in) // if the file is open and readable
{
for (int i = 0; i < V; i++)
{
for (int j = 0; j < V; j++)
{
if (!(in >> myArray[i][j]))
{ // failed to read a value from the file. Bad file
// may want to log the error here so you know why it failed
return false;
}
}
}
}
else
{ // couldn't open the file
// may want to log the error here so you know why it failed
return false;
}
return true; // read everything we wanted to read. all done.
}
然后在 main
int main()
{
int graph[V][V];
if (createMatrix(graph))
{ // read the file successfully
int m = 5; // Number of colors
graphColoring(graph, m);
}
else
{ // did not read the file successfully
// display failure message
}
system("pause");
}
关于c++ - 如何读取文件并将其存储为矩阵(二维数组)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49908871/
我正在运行一个辅助角色,并检查 Azure 上托管的存储中是否存在数据。当我将连接字符串用于经典类型的存储时,我的代码可以正常工作,但是当我连接到 V2 Azure 存储时,它会抛出此异常。 “远程服
在我的应用程序的主页上,我正在进行 AJAX 调用以获取应用程序各个部分所需的大量数据。该调用如下所示: var url = "/Taxonomy/GetTaxonomyList/" $.getJSO
大家好,我正在尝试将我的商店导入我的 Vuex Route-Gard。 路由器/auth-guard.js import {store} from '../store' export default
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我的 Windows 计算机上的本地文件夹中有一些图像。我想将所有图像上传到同一容器中的同一 blob。 我知道如何使用 Azure Storage SDKs 上传单个文件BlockBlobServi
我尝试发出 GET 请求来获取我的 Azure Blob 存储帐户的帐户详细信息,但每次都显示身份验证失败。谁能判断形成的 header 或签名字符串是否正确或是否存在其他问题? 代码如下: cons
这是用于编写 JSON 的 NeutralinoJS 存储 API。是否可以更新 JSON 文件(推送数据),而不仅仅是用新的 JS 对象覆盖数据。怎么做到的??? // Javascript
我有一个并行阶段设置,想知道是否可以在嵌套阶段之前运行脚本,所以像这样: stage('E2E-PR-CYPRESS') { when { allOf {
我想从命令行而不是从GUI列出VirtualBox VM的详细信息。我对存储细节特别感兴趣。 当我在GUI中单击VM时,可以看到包括存储部分在内的详细信息: 但是到目前为止,我还没有找到通过命令行执行
我有大约 3500 个防洪设施,我想将它们表示为一个网络来确定流动路径(本质上是一个有向图)。我目前正在使用 SqlServer 和 CTE 来递归检查所有节点及其上游组件,只要上游路径没有 fork
谁能告诉我 jquery data() 在哪里存储数据以及何时删除以及如何删除? 如果我用它来存储ajax调用结果,会有性能问题吗? 例如: $("body").data("test", { myDa
有人可以建议如何为 Firebase 存储中的文件设置备份。我能够备份数据库,但不确定如何为 firebase 存储中的文件(我有图像)设置定期备份。 最佳答案 如何进行 Firebase 存储的本地
我最近开始使用 firebase 存储和 firebase 功能。现在我一直在开发从功能到存储的文件上传。 我已经让它工作了(上传完成并且文件出现在存储部分),但是,图像永远保持这样(永远在右侧加载)
我想只允许用户将文件上传到他们自己的存储桶中,最大文件大小为 1MB,仍然允许他们删除文件。我添加了以下内容: match /myusers/{userId}/{allPaths=**} { al
使用生命周期管理策略将容器的内容从冷访问层移动到存档。我正在尝试以下策略,希望它能在一天后将该容器中的所有文件移动到存档层,但事实并非如此在职的。我设置了选择标准“一天未使用后”。 这是 json 代
对于连接到 Azure 存储端点,有 http 和 https 两个选项。 第一。 https 会带来开销,可能是 5%-10%,但我不支付同一个数据中心的费用。 第二。 http 更快,但 Auth
有人可以帮我理解这一点吗?我创建了Virtual Machine in Azure running Windows Server 2012 。我注意到 Azure 自动创建了一个存储帐户。当我进入该存
我是一名优秀的程序员,十分优秀!