为每个字符串标号(利用vector和map实现string->int的转换),然后再遍历之。
#include <iostream>
#include <map>
#include <string>
#include<utility>
#include <vector>
#include <set>
using namespace std;
#define N 12
#define M 10010
string A[M][N];
int B[M][N];
string ss, sss;
int row, col;
bool flag = true;
map<pair<int, int>, int> P;
map<string, int> check;
vector<string> keep;
int get_ID(string s)
{
if (check.count(s) != 0)
{
return check[s];
}
else
{
keep.push_back(s);
check[s] = keep.size() - 1;
return check[s];
}
}
int main()
{
while (cin>>row>>col)
{
flag = true;
check.clear();
keep.clear();
getchar();
for (int i = 1; i <= row; i++)
{
getline(cin, ss);
int cnt = 0;
string temp = "";
for (int j = 0; j < ss.size(); j++)
{
if (ss[j] == ',')
{
A[i][++cnt] = temp;
temp = "";
}
else
{
temp = temp + ss[j];
}
}
A[i][col] = temp;
}
for (int i = 1; i <= row; i++)
for (int j = 1; j <= col; j++)
{
B[i][j] = get_ID(A[i][j]);
//cout << B[i][j] << endl;
}
for (int i = 1; flag&&i <= col; i++)
{
for (int j = i+1; flag && j <= col; j++)
{
P.clear();
for (int k = 1; flag&&k <= row; k++)
{
pair<int, int> pp(B[k][i], B[k][j]);
if (P.count(pp) != 0)
{
flag = false;
cout << "NO" << endl;
cout << P[pp] << " " << k << endl;
cout << i << " " << j << endl;
}
else
{
P[pp] = k;
}
}
}
}
if (flag == true)
{
cout << "YES" << endl;
}
}
//system("pause");
return 0;
}