图的深度遍历
Time Limit: 1000MS
Memory Limit: 65536KB
Submit
Statistic
Discuss
Problem Description
请定一个无向图,顶点编号从0到n-1,用深度优先搜索(DFS),遍历并输出。遍历时,先遍历节点编号小的。
Input
输入第一行为整数n(0 < n < 100),表示数据的组数。 对于每组数据,第一行是两个整数k,m(0 < k < 100,0 < m < k*k),表示有m条边,k个顶点。 下面的m行,每行是空格隔开的两个整数u,v,表示一条连接u,v顶点的无向边。
Output
输出有n行,对应n组输出,每行为用空格隔开的k个整数,对应一组数据,表示DFS的遍历结果。
Example Input
1 4 4 0 1 0 2 0 3 2 3
Example Output
0 1 2 3
#include<iostream>
#include<cstring>
using namespace std;
int map[100][100],path[10000],visit[10000]={0},l=1,n,m;
void DFS(int st,int ed)
{
/*if(st==ed)
{
for(int i=0;i<l-1;++i)
cout<<path[i]<<' ';
cout<<path[l-1]<<endl;
}*/
visit[st]=1;//标记已经访问过
for(int i=0;i<n;++i)
{
if(!visit[i]&&map[st][i])
{
cout<<' '<<i;
DFS(i,n-1);
//--l;
//visit[i]=0;//记忆化搜索
}
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
memset(visit,0,sizeof(visit));
memset(map, 0, sizeof(map));
cin>>n>>m;
for(int i=0;i<m;++i)
{
int a,b;
cin>>a>>b;
map[a][b]=map[b][a]=1;
}
cout<<0;
DFS(0,n-1);
cout<<endl;
}
return 0;
}
2018/03/25更新java代码
public class Main {
private static int[][] go = { { -1, 0 }, { 1, 0 }, { 0, -1 }, { 0, 1 } }; // 上下左右
public static int m = 0, n = 0, s = 0;
private static int[][] vis = new int[10][10];
public static void main(String[] args) {
int N;
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
for (int i = 0; i < N; i++) {
init();
m = sc.nextInt();
n = sc.nextInt();
int[][] a = new int[m][n];
for (int i1 = 0; i1 < m; i1++) {
for (int j = 0; j < n; j++) {
a[i1][j] = sc.nextInt();
}
}
dfs(a, 0, 0);
System.out.println(s);
s = 0;
}
}
private static void init() {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
vis[i][j] = 0;
}
}
}
private static void dfs(int[][] a, int x, int y) {
if (x == m - 1 && y == n - 1) {
s++;
return;
} else {
for (int i = 0; i < 4; i++) {
int xx = x + go[i][0];
int yy = y + go[i][1];
if (xx >= 0 && xx < m && yy >= 0 && yy < n && vis[xx][yy] ==0 && a[xx][yy]==0) {
x = xx;
y = yy;
System.out.println("x:"+x+"--"+"y:"+y);
vis[x][y] = 1;
dfs(a, x, y);
System.out.println("yes I do "+x+'-'+y);
vis[x][y] = 0;
}
}
}
}
}