BFS может быть разумным, если граф неориентирован (будь моим гостем, показывая эффективный алгоритм с использованием BFS, который будет сообщать о циклах в ориентированном графике!), где каждый «перекрестный край» определяет цикл. Если кросс-ребро {v1, v2}
, а корень (в дереве BFS), который содержит эти узлы, r
, тогда цикл равен r ~ v1 - v2 ~ r
(~
- путь, -
- единственный край) о котором можно сообщать почти так же легко, как в DFS.
Единственная причина использования BFS - если вы знаете, что ваш (неориентированный) график будет иметь длинные пути и малую дорожку (другими словами, глубокую и узкую). В этом случае BFS потребует пропорционально меньше памяти для своей очереди, чем стек DFS (оба по-прежнему линейны, конечно).
Во всех остальных случаях DFS явно побеждает. Он работает как с направленными, так и неориентированными графами, и тривиально сообщать о циклах - просто конкатьте любой задний край на путь от предка до потомка, и вы получите цикл. В целом, гораздо лучше и практичнее, чем BFS для этой проблемы.
Лучший (и самый простой) способ - использовать намерение
:
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_EMAIL , new String[]{"recipient@example.com"});
i.putExtra(Intent.EXTRA_SUBJECT, "subject of email");
i.putExtra(Intent.EXTRA_TEXT , "body of email");
try {
startActivity(Intent.createChooser(i, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(MyActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
}
В противном случае вам придется написать своего собственного клиента.
Попробуйте это:
String mailto = "mailto:bob@example.org" +
"?cc=" + "alice@example.com" +
"&subject=" + Uri.encode(subject) +
"&body=" + Uri.encode(bodyText);
Intent emailIntent = new Intent(Intent.ACTION_SENDTO);
emailIntent.setData(Uri.parse(mailto));
try {
startActivity(emailIntent);
} catch (ActivityNotFoundException e) {
//TODO: Handle case where no email app is available
}
вышеупомянутый код откроет пользовательский почтовый клиент фаворита, предварительно заполненный электронной почтой, готовой отправить.
Отправка электронной почты может выполняться с помощью намерений, которые не требуют настройки. Но тогда это потребует взаимодействия с пользователем, и макет будет немного ограничен.
Создание и отправка более сложного электронного письма без взаимодействия с пользователем влечет за собой создание собственного клиента. Во-первых, недоступны Sun Java API для электронной почты. Мне удалось использовать библиотеку Apache Mime4j для создания электронной почты. Все основано на документации nilvec .