当前位置: 面试刷题>> 社交网络 (经典算法题500道)
**题目描述补充**:
在社交网络中,用户之间通过关注关系形成了一张复杂的网络图。给定一个用户列表和每对用户之间的关注关系,你的任务是编写一个算法来找出每个用户的所有粉丝(即关注该用户的用户)。为了简化问题,我们假设用户编号是从1开始的连续整数,且关注关系是无向的(即A关注B,则B也是A的粉丝)。但实际上在这个问题中,我们应当考虑关注关系是有向的,即A关注B,则B是A的粉丝,但A不是B的粉丝,除非另有指定。
**输入**:
- 一个整数N,表示用户的总数。
- 一个二维数组`follows`,其中`follows[i] = [userA, userB]`表示用户`userA`关注用户`userB`。
**输出**:
- 一个字典(或类似结构),键为用户编号,值为该用户的所有粉丝的列表。
**注意**:
- 如果有多个用户关注同一个用户,则该用户的粉丝列表中应包含所有这些用户的编号。
- 用户编号从1开始,并且连续递增。
**示例输入**:
```
N = 4
follows = [[1, 2], [2, 3], [3, 4], [4, 1]]
```
**示例输出**:
```
{
1: [4],
2: [1],
3: [2],
4: [3]
}
```
**PHP代码示例**:
```php
```
**Python代码示例**:
```python
def find_fans(N, follows):
fans = {i: [] for i in range(1, N + 1)} # 初始化用户及其粉丝字典
for follower, followee in follows:
fans[followee].append(follower) # 将关注者添加到被关注者的粉丝列表中
return fans
# 示例
N = 4
follows = [[1, 2], [2, 3], [3, 4], [4, 1]]
result = find_fans(N, follows)
print(result)
```
**JavaScript代码示例**:
```javascript
function findFans(N, follows) {
const fans = {};
for (let i = 1; i <= N; i++) {
fans[i] = []; // 初始化用户及其粉丝列表
}
for (const [follower, followee] of follows) {
fans[followee].push(follower); // 将关注者添加到被关注者的粉丝列表中
}
return fans;
}
// 示例
const N = 4;
const follows = [[1, 2], [2, 3], [3, 4], [4, 1]];
const result = findFans(N, follows);
console.log(result);
```
**码小课提醒**:
在码小课网站上,你可以找到更多关于数据结构与算法、编程技巧以及实战项目的分享,帮助你提升编程能力。