第六个任务(2天)
图
实现有向图、无向图、有权图、无权图的邻接矩阵和邻接表表示方法
实现图的深度优先搜索、广度优先搜索 实现 Dijkstra 算法、A* 算法
实现拓扑排序的 Kahn 算法、DFS 算法
对应的 LeetCode
练习题 Number of Islands(岛屿的个数) 英文版:Loading... 中文版:力扣
Valid Sudoku(有效的数独) 英文版:Loading... 中文版:力扣
LeetCode 200. Number of Island
public class NumberofIslands {
static int[] dx = {-1,0,0,1};
static int[] dy = {0,1,-1,0};
public static int numIslands(char[][] grid) {
if(grid==null || grid.length==0) return 0;
int islands = 0;
for(int i=0;i<grid.length;i++) {
for(int j=0;j<grid[i].length;j++) {
if(grid[i][j]=='1') {
explore(grid,i,j);
islands++;
}
}
}
return islands;
}
public static void explore(char[][] grid, int i, int j) {
grid[i][j]='x';
for(int d=0;d<dx.length;d++) {
if(i+dy[d]<grid.length && i+dy[d]>=0 && j+dx[d]<grid[0].length && j+dx[d]>=0 && grid[i+dy[d]][j+dx[d]]=='1') {
explore(grid,i+dy[d],j+dx[d]);
}
}
}
}
LeetCode 36. Valid Sudoku
public class Solution {
public boolean isValidSudoku(char[][] board) {
for (int i=0; i<9; i++) {
if (!isParticallyValid(board,i,0,i,8)) return false;
if (!isParticallyValid(board,0,i,8,i)) return false;
}
for (int i=0;i<3;i++){
for(int j=0;j<3;j++){
if (!isParticallyValid(board,i*3,j*3,i*3+2,j*3+2)) return false;
}
}
return true;
}
private boolean isParticallyValid(char[][] board, int x1, int y1,int x2,int y2){
Set singleSet = new HashSet();
for (int i= x1; i<=x2; i++){
for (int j=y1;j<=y2; j++){
if (board[i][j]!='.') if(!singleSet.add(board[i][j])) return false;
}
}
return true;
}
}