#4
by かずま » 7年前
ace-k@ さんが書きました: ↑7年前
コード:
//元の配列: ( i=3, j=4)
std::vector<int> vector_A[i][j] = { 0,1,0,1,
1,1,0,0,
1,1,0,1 };
//生成したい配列: ( i=3, i'=3)
std::vector<int> vector_B[i][i'] = { 2,1,2,
1,2,2,
2,2,3 };
どの 2行をとっても、内積が 3になることはないと思います。
コード:
#include <iostream> // cout, endl
#include <vector> // push_back, begin, end
#include <algorithm> // sort, next_permutation
using namespace std;
int iprod(vector<int>& a, vector<int>& b) // inner product
{
int p = 0;
for (size_t i = 0; i < a.size(); i++) p += a[i] * b[i];
return p;
}
int main()
{
vector<vector<int>> a = {
{ 0, 1, 0, 1 },
{ 1, 1, 0, 0 },
{ 1, 1, 0, 1 },
};
vector<vector<int>> b;
size_t m = a.size();
vector<int> p(m * (m - 1) / 2);
for (size_t k = 0, i = 0; i < m - 1; i++)
for (size_t j = i + 1; j < m; j++) p[k++] = iprod(a[i], a[j]);
sort(begin(p), end(p));
do b.push_back(p); while (next_permutation(begin(p), end(p)));
for (size_t i = 0; i < b.size(); i++, endl(cout))
for (size_t j = 0; j < b[i].size(); j++) cout << " " << b[i][j];
}
実行結果
[quote=ace-k@ post_id=150753 time=1527231278 user_id=2677]
[code]
//元の配列: ( i=3, j=4)
std::vector<int> vector_A[i][j] = { 0,1,0,1,
1,1,0,0,
1,1,0,1 };
//生成したい配列: ( i=3, i'=3)
std::vector<int> vector_B[i][i'] = { 2,1,2,
1,2,2,
2,2,3 };[/code]
[/quote]
どの 2行をとっても、内積が 3になることはないと思います。
[code]
#include <iostream> // cout, endl
#include <vector> // push_back, begin, end
#include <algorithm> // sort, next_permutation
using namespace std;
int iprod(vector<int>& a, vector<int>& b) // inner product
{
int p = 0;
for (size_t i = 0; i < a.size(); i++) p += a[i] * b[i];
return p;
}
int main()
{
vector<vector<int>> a = {
{ 0, 1, 0, 1 },
{ 1, 1, 0, 0 },
{ 1, 1, 0, 1 },
};
vector<vector<int>> b;
size_t m = a.size();
vector<int> p(m * (m - 1) / 2);
for (size_t k = 0, i = 0; i < m - 1; i++)
for (size_t j = i + 1; j < m; j++) p[k++] = iprod(a[i], a[j]);
sort(begin(p), end(p));
do b.push_back(p); while (next_permutation(begin(p), end(p)));
for (size_t i = 0; i < b.size(); i++, endl(cout))
for (size_t j = 0; j < b[i].size(); j++) cout << " " << b[i][j];
}
[/code]
実行結果
[code]
1 2 2
2 1 2
2 2 1
[/code]