多源BFS
问题: 求出所有多源起点(可看成一个点)到所有点的最短距离。
矩阵距离
核心代码:
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
if(str[i][j] == '1') dis[i][j] = 0, que.push({i, j});
// 把源点都压入队列
[题目&题解]Distinctive Character(多源bfs)
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
int vis[1 << 22];
queue<int> que;
int main()
{
int n, k; scanf("%d %d", &n, &k);
for(int i=0; i<n; i++){
string str; cin >> str;
int t = 0;
for(int j=0; j < k; j++) t = t * 2 + str[j] - '0';
vis[t] = 1;
que.push(t);
}
int ans;
while(!que.empty())
{
int tmp = que.front(); que.pop();
ans = tmp; // 答案可能位于源点,在队列出口更新答案
for(int i=0; i<k; i++){
tmp ^= 1 << i;
if(vis[tmp]) { tmp ^= 1 << i; continue; }
vis[tmp] = 1;
que.push(tmp);
tmp ^= 1 << i;
}
}
for(int i=k - 1; i>=0; i--) printf("%d", ans >> i & 1);
system("pause");
return 0;
}