# 2115. Find All Possible Recipes from Given Supplies
{%hackmd theme-dark %}
> Input:
> recipes = ["bread", "burger"],
> ingredients = [["yeast","flour"], ["bread", "yeast"]]
> supplies = ["yeast","flour","corn"]
>
Return a list of all the recipes that you can create. You may return the answer in any order.
// ex bread in=0 yeast","flour in supplies
// ex burger in= 1 yeast in sup but bread not yet
```cpp=
class Solution {
public:
vector<string> findAllRecipes(vector<string>& recipes, vector<vector<string>>& ingredients, vector<string>& supplies) {
unordered_map<string, unordered_set<string>> graph;
unordered_map<string, int> indegree;
unordered_set<string> supply(supplies.begin(), supplies.end());
for (auto &recipe: recipes) {
indegree[recipe] = 0;
}
for (int i = 0; i < ingredients.size(); i++) {
for (auto &ingred: ingredients[i]) {
if (supply.find(ingred) == supply.end()) {
graph[ingred].insert(recipes[i]);
indegree[recipe[i]]++;
}
}
}
// graph[bread]: burger;
queue<string> q;
for (auto &[recipe, degree]: indegree) {
if (degree == 0) {
q.push(recipe);
}
}
vector<string> res;
// q: bread
while (!q.emtpy()) {
auto recipe = q.front();
q.pop();
res.push_back(recipe);
for (auto &ingred: graph[recipe]) {
if (--indegree[ingred] == 0) {
q.push(ingred);
}
}
}
return res;
}
};
```
###### tags: `mock interview` `面試`